2013-12-23 68 views
0

我有一個私有構造函數和工廠方法的類。我可以有一個只用工廠方法創建的成員變量嗎?

是否有可能讓該類的實例成爲另一個類的成員變量?如果我試圖通常這樣做,它將不會編譯,因爲它無法調用構造函數。是否有可能獲得用工廠方法初始化的成員變量?

如果不是,我的選擇是什麼?我需要使用某種指針嗎?

class ClassWithPrivateConstructor 
{ 
private: 
    ClassWithPrivateConstructor(){} 
public: 
    static ClassWithPrivateConstructor Create(); // factory method 
}; 

class ClassWithMemberVariable 
{ 
    ClassWithPrivateConstructor a; 
}; 

回答

3

當然。由於成員不能是默認初始化的,你需要一個初始化器:

ClassWithPrivateConstructor a = ClassWithPrivateConstructor::Create(); 

,或者,如果你堅持預先2011變種的語言,在每個構造一個初始化器:

public: 
    ClassWithMemberVariable() : a(ClassWithPrivateConstructor::Create()) {} 
2

只要確保每個構造經由工廠方法初始化的構件:

class ClassWithMemberVariable 
{ 
    ClassWithPrivateConstructor a; 
    ClassWithMemberVariable(): a(ClassWithPrivateConstructor::Create()) { 
    ; 
    } 
}; 
相關問題