Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 选择退出复制构造函数_C++_G++_Default Copy Constructor - Fatal编程技术网

C++ 选择退出复制构造函数

C++ 选择退出复制构造函数,c++,g++,default-copy-constructor,C++,G++,Default Copy Constructor,这可能是个愚蠢的问题,但是 我一直在写一些利用不可复制成员的类。这些类从未通过源代码中的复制构造函数初始化。当我试图在不提供自己的复制构造函数的情况下进行编译时,g++抛出了许多错误,说明由于不可复制的成员对象,它如何无法构建默认的复制构造函数 有没有办法告诉编译器不要给我复制构造函数? 编辑:是的。。。感觉很傻。。。我有一个例子,我在boost::bind调用中意外调用了复制构造函数。经验教训。 < P>不在当前版本的C++中。在C++ 0x中,将有一个 =删除;语法,告诉你如果你自己没有定义

这可能是个愚蠢的问题,但是

我一直在写一些利用不可复制成员的类。这些类从未通过源代码中的复制构造函数初始化。当我试图在不提供自己的复制构造函数的情况下进行编译时,g++抛出了许多错误,说明由于不可复制的成员对象,它如何无法构建默认的复制构造函数

有没有办法告诉编译器不要给我复制构造函数?


编辑:是的。。。感觉很傻。。。我有一个例子,我在boost::bind调用中意外调用了复制构造函数。经验教训。

< P>不在当前版本的C++中。在C++ 0x中,将有一个<代码> =删除;<代码>语法,告诉你如果你自己没有定义一个特殊的成员函数,编译器将在默认情况下生成。

不在当前版本的C++中。在C++ 0x中,将有一个<代码> =删除;<代码>语法告诉它,如果您不自己定义一个特殊的成员函数,编译器将默认生成一个特殊的成员函数。

使事情不可复制的通常方法是声明但不定义复制构造函数,并将其设为私有,这样就没有任何东西可以调用它


该语言的下一个版本将提供一个.

使事物不可复制的常用方法是声明但不定义复制构造函数,并将其设置为私有,这样就没有任何东西可以调用它


该语言的下一个版本将提供一个。

如果您实际上没有导致调用复制构造函数,那么如果编译器无法生成一个,则这不是一个错误。听起来好像是(可能是间接地)导致使用复制构造函数

您可以通过声明自己的副本构造函数来抑制编译器生成的副本构造函数(如果不使用它,则无需定义它)。你可以把它放在你的类的
private
部分


如果这改变了错误,说复制构造函数不可访问,或者你得到了链接错误,那么你确实是在使用复制构造函数,你需要分析原因。

如果你实际上没有导致调用复制构造函数,那么如果编译器无法生成一个,那就不是错误。听起来好像是(可能是间接地)导致使用复制构造函数

您可以通过声明自己的副本构造函数来抑制编译器生成的副本构造函数(如果不使用它,则无需定义它)。你可以把它放在你的类的
private
部分

如果这改变了错误,表示复制构造函数不可访问或出现链接错误,那么您确实是在使用复制构造函数,您需要分析原因。

否:)

如果您希望类不可复制,请使用类似于
boost::noncopyable

class MyClass : private boost::noncopyable
{

}
或者在类定义中使用声明私有副本构造函数的参数化宏。

否:)

如果您希望类不可复制,请使用类似于
boost::noncopyable

class MyClass : private boost::noncopyable
{

}

或使用类定义中的参数化宏声明私有复制构造函数。

< P>直到完全支持新的C++ 0x标准,您最好做的是删除特殊成员函数的版本,但不实现它们。通常,它们是私有的(以帮助明确它们不应该被使用)


<> P>完全支持新的C++ 0x标准,最好的办法是删除特殊成员函数的版本,但不实现它们。通常,它们是私有的(以帮助明确它们不应该被使用)