在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"。为什么?一些忠告?谢谢大家。
答案 0 :(得分:7)
p1
和p2
是指针。您可以将一个指针指向另一个相同类型的指针。在您的代码段中,您的复制构造函数和复制赋值运算符都没有被使用。
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)
您不是要复制或分配对象。您复制指针。这意味着您将对象的地址从一个变量复制到另一个变量。