有时需要禁止C++类中的拷贝构造函数,以便类变为“不可拷贝”。当然,operator=
应该同时被禁止。在C++中禁止拷贝构造函数的最可靠方法是什么?
到目前为止,我见过两种方式来做到这一点。方法1是申报方法私有,并给它没有实现:
class Class {
//useful stuff, then
private:
Class(const Class&); //not implemented anywhere
void operator=(const Class&); //not implemented anywhere
};
方式二是申报方法私有,并给它“空”的实施:
class Class {
//useful stuff, then
private:
Class(const Class&) {}
void operator=(const Class&) {}
};
IMO第一个是更好的 - 即使有一些意想不到的原因导致从同一个类成员函数调用拷贝构造函数,稍后会出现链接器错误。在第二种情况下,直到运行时才会忽略这种情况。
第一种方法有什么严重的缺点吗?什么是更好的方式,如果有的话,为什么?
http://www.boost.org/doc/libs/1_46_1/boost/noncopyable.hpp – dgnorton 2011-04-18 11:28:17