4

在 VS2012 中,“显式默认和删除的特殊成员函数”功能http://en.wikipedia.org/wiki/C++0x#Explicitly_defaulted_and_deleted_special_member_functions,http://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;    
};

到具有相同功能但不使用defaultand的东西delete?如何?

4

2 回答 2

4

你是对的,这些功能还不可用。

但是,您可以这样做:

struct NonCopyable {
    // ...

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

只需将复制构造函数复制分配操作符(无定义)声明为私有,就可以使它们不可用。所以它作为你想要的效果。

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

于 2013-09-08T08:23:28.510 回答
2

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

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

好读:
不可复制的 Mixin

于 2013-09-08T08:09:18.950 回答