据我所知,C++ 默认复制构造函数只有在类是 POD 类时才会按预期运行。
我想知道是否有一种解决方案可以防止程序员在对象不是 POD 的情况下编写(隐式或非隐式地)使用默认复制构造函数的代码。
我知道您总是可以将您的拷贝和分配设为私有(private)来解决这个问题,但我想知道是否有自动解决方案。例如,如果您的代码生成默认的复制构造函数调用并且您的类不是 POD,编译器可能会生成警告?
这里的目标是检测我忘记声明复制/分配私有(private)或手动定义它们的情况。
你们也知道 cppcheck 是否可以做到这一点吗?
最佳答案
在 C++0x 中,您可以显式地阻止使用像这样的特殊成员函数:
struct NonCopyable {
NonCopyable & operator=(const NonCopyable&) = delete;
NonCopyable(const NonCopyable&) = delete;
NonCopyable() = default;
};
参见 here更多细节。不幸的是,仍然是手动的,但比现在更优雅。
关于c++ - 禁用非 POD 类的默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4255481/