我有下面的類:以下場景使用哪種模式?
class Base {
public:
Base(string name) {
agg = new Aggregate(name);
}
private:
Aggregate* agg;
};
現在我需要擴展這個類:
class Derived : Base {
public:
Derived(string name) : Base(name) {
agg2 = new Aggregate2(name);
}
private:
Aggregate2* agg2;
};
我想要的是當我創建一個Base
對象,Aggregate
需要創建,當我創建應該創建一個Derived
對象只有Aggregate2
。
現在,這是不會發生,因爲它的Aggregate
當我創建一個Derived
對象也就是所謂的構造函數中像這樣Aggregate
和Aggregate2
將創建創建。
我可以將創建移動到不同的方法,並在創建對象後調用它。
有沒有其他優雅的方式來做我想要的?
爲什麼不創建一個單獨的,不受保護的構造函數? – Rufflewind
那麼,當你創建'Derived'你想離開'agg'未初始化?你可以做到這一點,例如使用Rufflewind的建議,但聽起來你正試圖將[Liskov Substitution Principle](http://en.wikipedia.org/wiki/Liskov_substitution_principle)打破給我,這通常是一個壞主意。 –
[OT]:你應該使用'std :: unique_ptr agg;'而不是原始擁有指針。 –
Jarod42