在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;
};
具有相同功能但未使用default
和delete
的内容?怎么样?
答案 0 :(得分:4)
你是对的,这些功能还没有。
但是,你可以这样做:
struct NonCopyable {
// ...
private:
NonCopyable(const NonCopyable&);
NonCopyable & operator=(const NonCopyable&);
};
通过将 copy-constructor 和 copy-assignement-operator (无定义)声明为私有,您可以使它们无法使用。所以这就是你想要的效果。
答案 1 :(得分:2)
您似乎想要创建一个不可复制的类。 C ++ 11引入了delete
能够轻松提供此功能的功能,而在C ++ 11之前,您可以通过以下方式实现相同功能:
private
和