【发布时间】:2010-11-24 00:52:11
【问题描述】:
据我了解,C++ 默认复制构造函数仅在类是 POD 类时才会按预期运行。
我想知道如果对象不是 POD,是否有解决方案可以防止程序员编写(隐式或不)使用默认复制构造函数的代码。
我知道您始终可以将您的副本和作业设为私有以解决此问题,但我想知道是否有自动解决方案。例如,如果您的代码生成默认的复制构造函数调用并且您的类不是 POD,编译器可能会生成警告?
这里的目标是检测我忘记将复制/分配私有或手动定义它们的情况。
你们也知道 cppcheck 是否可以做到这一点吗?
【问题讨论】:
-
"C++ 默认复制构造函数仅在类是 POD 类时按预期运行。" ——这是错误的。只要它的所有成员都正确复制,默认的复制构造函数应该没问题。例如,如果我的类有一个vector
,它将使用默认的复制构造函数很好地复制,因为它会调用vector的复制构造函数,而vector又会调用它的每个字符串的复制构造函数。 -
好点。那么这个问题可能没有简单的解决方案。编译器必须通过所有继承/组合图来查看是否所有成员都定义了复制构造函数,或者是 POD,我猜:/
标签: c++ visual-c++ constructor copy warnings