为什么私有拷贝构造函数不起作用?

时间:2015-08-10 22:25:03

标签: c++ c++11 visual-c++ operator-overloading copy-constructor

在MAIN:

Text *p1 = new Text("alfa");
Text *p2 = new Text("delta");
p1 = p2;

在Text.h中

private:
Text (const Text& t);
Text&  operator=(const Text& t);

但是,我认为编译器应该给出类似"运算符=无法访问"的错误,而代码工作就像复制构造函数和运算符=不是私有的。实际上,最后p1 = p2 =" delta"。为什么?一些忠告?谢谢大家。

3 个答案:

答案 0 :(得分:7)

p1p2是指针。您可以将一个指针指向另一个相同类型的指针。在您的代码段中,您的复制构造函数和复制赋值运算符都没有被使用。

Text *p1 = new Text("alfa");
Text *p2 = new Text("delta");
p1 = p2;

如果你写了这个,那么将使用复制构造函数,例如:

Text *p3 = new Text( *p1 );

如果你写了这个,就会使用复制赋值运算符:

*p1 = *p2;

在这种情况下,您将一个Text类型的对象分配给另一个Text类型的对象。

答案 1 :(得分:2)

您的示例代码正在指定指向另一个指针的指针。由于您正在执行简单的指针赋值,因此不会调用赋值运算符。如果要尝试调用赋值运算符,则应尝试:

*p1 = *p2;

否则,您当前的代码几乎等同于将一个整数分配给另一个整数。

答案 2 :(得分:2)

您不是要复制或分配对象。您复制指针。这意味着您将对象的地址从一个变量复制到另一个变量。