有時需要禁止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