显式默认和删除构造函数:VS2012中是否有类似的功能?

时间:2013-09-08 08:07:04

标签: c++ visual-studio-2012 c++11 constructor copy-constructor

在VS2012中,“明确默认和删除的特殊成员函数”功能(http://en.wikipedia.org/wiki/C++0x#Explicitly_defaulted_and_deleted_special_member_functionshttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm)尚不可用(http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx)。是否有使用此类功能的解决方法,即使非常非常冗长? 在实践中,我可以翻译这个

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

具有相同功能但未使用defaultdelete的内容?怎么样?

2 个答案:

答案 0 :(得分:4)

你是对的,这些功能还没有。

但是,你可以这样做:

struct NonCopyable {
    // ...

private:      
    NonCopyable(const NonCopyable&);
    NonCopyable & operator=(const NonCopyable&);
};

通过将 copy-constructor copy-assignement-operator (无定义)声明为私有,您可以使它们无法使用。所以这就是你想要的效果。

这里的答案很好:https://stackoverflow.com/a/2173764/1394283

答案 1 :(得分:2)

您似乎想要创建一个不可复制的类。 C ++ 11引入了delete能够轻松提供此功能的功能,而在C ++ 11之前,您可以通过以下方式实现相同功能:

  • 将复制构造函数和复制赋值运算符声明为private
  • 不要为两者提供任何定义。

好读:
Non-copyable Mixin