std :: string x(x);

fre*_*low 9 c++ copy-constructor

std::string x(x);
Run Code Online (Sandbox Code Playgroud)

这对我的编译器崩溃非常严重.这是否意味着我应该this != &that在我自己的拷贝构造函数中进行测试,或者我可以假设没有客户端会如此愚蠢?

Joh*_*itb 9

您不应该尝试对尝试严重崩溃的代码进行测试.请参阅Null参考.它说

"正如你必须假设一个非空指针有效,你必须假设一个引用是有效的.你必须对你的程序员有信心."

我想补充一下

...您必须假设副本的来源有效.

如果你"修理"你的案子,该怎么办?

string x = string(x);
Run Code Online (Sandbox Code Playgroud)


Unc*_*ens 6

用自己初始化某些东西是未定义的行为,这可能甚至意味着一旦调用它你甚至无法在以后检测到它.假设编译器检测到它并且没有spite为nasal demons生成程序集,而不是调用你的拷贝构造函数?

在实践中,您可以假设客户端不是那么愚蠢,如果是这样,他们的业务是调试它并弄清楚.