为什么私有复制构造函数不起作用?
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"。为什么?一些忠告?感谢大家。
p1
和 p2
是指针。您可以将一个指针分配给同一类型的另一个指针。在您的代码片段中,您的复制构造函数和复制赋值运算符都没有被使用。
Text *p1 = new Text("alfa");
Text *p2 = new Text("delta");
p1 = p2;
如果这样写,就会用到拷贝构造函数,例如:
Text *p3 = new Text( *p1 );
如果您这样写,将使用复制赋值运算符:
*p1 = *p2;
在这种情况下,您会将一个 Text
类型的对象分配给另一个 Text
类型的对象。
您的示例代码正在将一个指针分配给另一个指针。这不会调用赋值运算符,因为您正在执行简单的指针赋值。如果您想尝试调用赋值运算符,您应该尝试:
*p1 = *p2;
否则,您当前的代码几乎等同于将一个整数赋给另一个整数。
您没有复制或分配对象。你复制一个指针。这意味着您将对象的地址从一个变量复制到另一个变量。
在主要:
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"。为什么?一些忠告?感谢大家。
p1
和 p2
是指针。您可以将一个指针分配给同一类型的另一个指针。在您的代码片段中,您的复制构造函数和复制赋值运算符都没有被使用。
Text *p1 = new Text("alfa");
Text *p2 = new Text("delta");
p1 = p2;
如果这样写,就会用到拷贝构造函数,例如:
Text *p3 = new Text( *p1 );
如果您这样写,将使用复制赋值运算符:
*p1 = *p2;
在这种情况下,您会将一个 Text
类型的对象分配给另一个 Text
类型的对象。
您的示例代码正在将一个指针分配给另一个指针。这不会调用赋值运算符,因为您正在执行简单的指针赋值。如果您想尝试调用赋值运算符,您应该尝试:
*p1 = *p2;
否则,您当前的代码几乎等同于将一个整数赋给另一个整数。
您没有复制或分配对象。你复制一个指针。这意味着您将对象的地址从一个变量复制到另一个变量。