使用“this”作为复制构造函数的参数

时间:2009-02-17 00:08:35

标签: c++

我有一个c ++类,假设它叫做c,我想在其中一个方法中使用隐式复制构造函数,如下所示:

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

但是,gcc会返回此错误:

  

错误:从'c * const'到'long unsigned int'

的无效转换

(我有来自long unsigned int的另一个构造函数)

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

3 个答案:

答案 0 :(得分:20)

这个是一个指向对象的指针,所以它应该是

c copy = *this;

答案 1 :(得分:6)

相当一边,但它不会真正适合评论,似乎存在一些分歧。尝试使用这段代码来了解何时调用copy-constructors和赋值运算符:

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

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)
}

答案 2 :(得分:4)

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

c copy (*this);

是复制构造函数;

c copy = *this;

是复制赋值运算符。两者都可以工作,尽管复制构造函数在技术上更有效,尽管复制赋值运算符通常经过优化以执行相同的操作。


哇 - 我发现自己得到了纠正。在与变量声明相同的语句中使用=运算符确实调用了复制构造函数。你每天都学到新东西!