doc*_*doc 4 c++ constructor declaration copy-constructor default-constructor
例如这是正确的:
class C
{
private:
C();
C(const & C other);
}
Run Code Online (Sandbox Code Playgroud)
或者您应该提供定义:
class C
{
private:
C() {};
C(const & C other) {};
}
Run Code Online (Sandbox Code Playgroud)
?谢谢你目前的答案.让我们扩展这个问题 - 编译器是否在其中一个示例中生成了更好的代码?我可以想象为ctor强制编译器提供体在编译单元中包含一些(空)代码?这对于自动生成的代码也是如此吗?
Nav*_*een 11
如果您不希望您的对象是可复制的,则无需提供实现.只需在没有任何实现的情况下声明copy ctor私有.其他ctors也是如此,如果你不想让任何机构使用它们,只需将它们声明为私有而不进行任何实现.
只要你不使用它们就可以了.
使用0x标准,您可以使用已删除的功能.
class X {
// ...
X& operator=(const X&) = delete; // Disallow copying
X(const X&) = delete;
};
Run Code Online (Sandbox Code Playgroud)
您可以使用仅声明构造函数来禁止给定的构造,例如标准构造或复制构造.
例如,如果要避免复制对象,可以将复制构造函数和赋值运算符声明为私有,并且不要定义它们,那么尝试复制对象的任何人(包括您)都会有链接器错误.
关于你的上一次编辑:我希望一个像样的编译器为默认构造函数和一个空构造函数生成相同的代码而没有初始化列表,最后,它需要做的是默认初始化每个成员.