c++ - 禁用非 POD 类的默认构造函数

标签 c++ visual-c++ constructor copy warnings

据我所知,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/

相关文章:

winapi - 如何登录win32 c++到Visual Studio输出窗口?

actionscript-3 - 显式键入变量会使编译器认为内置类型的实例不具有属性,而它确实具有

c++ - Bazel:如何将标题放入一个包含路径

c++ - QT 类型被外部库定义为 int?

c++ - 为什么我不能使用带有 ofstream 的 Windows 环境路径来编写文本文件?

c++ - 如何以编程方式获取目录中的文件列表

c++ - 为什么不同的 C++ 编译器对此代码给出不同的结果?

c++ - 一个类可以有多少个构造函数?

C++ 在构造函数中删除对象?

c++ - 非常基本的 C++ 程序问题——二进制表达式的无效操作数