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

Joe*_*att 2 c++ operator-overloading copy-constructor visual-c++ c++11

在主要:

Text *p1 = new Text("alfa");
Text *p2 = new Text("delta");
p1 = p2;
Run Code Online (Sandbox Code Playgroud)

在Text.h中

private:
Text (const Text& t);
Text&  operator=(const Text& t);
Run Code Online (Sandbox Code Playgroud)

但是,我认为编译器应该给出一个错误,例如"operator = is unaccessible",而代码工作就像复制构造函数和operator =不是私有的.实际上,最后p1 = p2 ="delta".为什么?一些忠告?谢谢大家.

Vla*_*cow 7

p1并且p2是指针.您可以将一个指针指向另一个相同类型的指针.在您的代码段中,您的复制构造函数和复制赋值运算符都未被使用.

Text *p1 = new Text("alfa");
Text *p2 = new Text("delta");
p1 = p2;
Run Code Online (Sandbox Code Playgroud)

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

Text *p3 = new Text( *p1 );
Run Code Online (Sandbox Code Playgroud)

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

*p1 = *p2;
Run Code Online (Sandbox Code Playgroud)

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