[英]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.