Effective C++之構造,拷貝函式
阿新 • • 發佈:2018-12-09
3.條款之不使用預設生成的函式,應該明確拒絕 我們知道C++類會幫我們自動生成建構函式,解構函式函式,拷貝建構函式,和賦值函式 #include <iostream> using namespace std;
class homeclass{};
int main(int argc,char *argv[]) { homeclass h1,h2; homeclass h3(h1); h1 = h2;
return 0; } 以下程式碼是可以通過,也符合C++準則,但是當我們不使用這些函式的時候 方法1.可以把他們宣告為私有函式: class homeclass{ public:
private: homeclass(const homclass&); homeclass & operator=(const homeclass&); }; 此處不加引數名,是因為我們本來就不想讓他們實現,加引數名無意義 方法2.方法1雖然這樣做,但是不足夠安全,因為在member函式或frind函式還是可以呼叫我們的私有函式 class uncopy{ protected: uncopy(); ~uncopy(); private: uncopy(const uncopy&) uncopy & operator=(const uncopy&); };
class homeclass:private uncopy{
};
此規則:為了駁回編譯器自動生成的機能,可對成員函式宣告為private不予實現。使用像uncpoy這樣的base class也是一種做法。