为什么私有复制构造函数不起作用?

Why the private copy constructor doesn't work?

在主要:

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

在Text.h

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

但是,我认为编译器应该给出像 "The operator = is unaccessible" 这样的错误,而不是代码像复制构造函数和运算符 = 不是私有的那样工作。事实上,最后 p1=p2="delta"。为什么?一些忠告?感谢大家。

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

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

如果这样写,就会用到拷贝构造函数,例如:

Text *p3 = new Text( *p1 );

如果您这样写,将使用复制赋值运算符:

*p1 = *p2;

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

您的示例代码正在将一个指针分配给另一个指针。这不会调用赋值运算符,因为您正在执行简单的指针赋值。如果您想尝试调用赋值运算符,您应该尝试:

*p1 = *p2;

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

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