繁体   English   中英

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

[英]Disabling default constructor for non-POD classes

据我所知,当类是POD类时,C ++默认复制构造函数只能按预期运行。

我想知道是否有一个解决方案可以阻止程序员编写代码(如果对象不是POD,则隐含或不利用)使用默认的复制构造函数。

我知道您可以随时将您的副本和分配私有化以解决此问题,但我想知道是否有自动解决方案。 例如,如果您的代码生成默认的复制构造函数调用且您的类不是POD,编译器可能会生成警告?

这里的目标是检测我忘记声明复制/分配私有或手动定义它们的情况。

你们也知道cppcheck能做到吗?

在C ++ 0x中,您可以明确地阻止使用这样的特殊成员函数:

struct NonCopyable {
    NonCopyable & operator=(const NonCopyable&) = delete;
    NonCopyable(const NonCopyable&) = delete;
    NonCopyable() = default;
};

有关详细信息,请参见此处 不幸的是仍然手动,但比现在更优雅。

不,因为这是语言的要求。

在创建类时,您有3种可能:拥有默认的copy ctor,编写自己的或者禁用它(使用不同的方法来执行它;继承自boost :: noncopyable以提及一个)。 不清楚为什么编译器应该警告你选择其中一个。

禁用默认构造的集中方法是使默认构造函数不可访问。

你写道:“我想知道是否有一个解决方案可以阻止程序员编写代码(如果对象不是POD,那么(隐含或不相关)使用默认的拷贝构造函数。”

大概你的意思是你希望编译器对任何非POD对象的任何默认构造作出反应。

对不起,没有编译器独立的方式。

原因:很多非POD类,如智能指针和容器(如std::vector ,依赖于默认构造很有用。

g ++编译器有一个选项-Weffc++来警告Scott Meyers的Effective C ++中违反指南的行为,但据我所知 - 我可能错了 - 这不包括你的情况。 但据说可以说是有用的。

干杯&hth。,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM