English 中文(简体)
使用“this”作为参数的复制构造函数
原标题:
  • 时间:2009-02-17 00:08:35
  •  标签:

我有一个C++类,假设它叫做C,我想在其中一个方法中使用隐式复制构造函数,就像这样:

c c::do_something() {
  c copy = this; //I want implicit copy constructor here!
  copy.something_else(); 
  //........//
  return copy;
}

然而,GCC 返回了这个错误:

错误:无效的转换,从c* const到长无符号整数。

我有一个长无符号整数的另一个构造函数。

好像复制构造函数不存在。我做错了什么?

最佳回答

是一个指向对象的指针,因此应该是

c copy = *this;
问题回答

相当于离题,但它不会真正适合在评论中,并且似乎存在一些分歧。尝试使用以下代码片段,以了解何时调用复制构造函数和赋值运算符:

class A
{
public:
    A() { cout << "A::A()
"; }
    A(const A &) { cout << "A::A(const A &)
"; }
    void operator =(const A &) { cout << "A::operator=(const A &)
"; }
};

int main()
{
    A a; // default constructor
    A copy = a; // copy constructor (and no assignment operator)
    A copy2(a); // copy constructor (and no assignment operator)
    a = copy; // assignment operator
    A function(); // declares a function return A
    A b = A(); // default constructor (but no assignment operator)
    A b2 = A(a); // copy constructor (but no assignment operator)
}

哇哇!而且,不要混淆复制构造函数和复制赋值运算符。

c copy (*this);

是复制构造函数;

c copy = *this;

是拷贝赋值运算符。两种方法都可以使用,尽管拷贝构造函数在技术上更有效,但拷贝赋值运算符经常被优化以执行相同的操作。


哇 - 我发现自己被更正了。在变量的声明语句中使用 = 运算符确实调用了复制构造函数。每天都有新知识!

this is the pointer of an object not the object himself. You should use *this to get the object.





相关问题
热门标签