Adr*_*ian 2 c++ design-patterns
我有以下课程:
class Base {
public:
Base(string name) {
agg = new Aggregate(name);
}
private:
Aggregate* agg;
};
Run Code Online (Sandbox Code Playgroud)
现在我需要扩展这个类:
class Derived : Base {
public:
Derived(string name) : Base(name) {
agg2 = new Aggregate2(name);
}
private:
Aggregate2* agg2;
};
Run Code Online (Sandbox Code Playgroud)
我想要的是当我创建一个Base对象时,Aggregate需要创建它,当我创建一个Derived对象时,Aggregate2应该只创建它.
现在这不会发生,因为Aggregate它是在构造函数内部创建的,当我创建一个Derived对象Aggregate并且Aggregate2会创建它时会调用它.
我可以将创建移动到另一个方法,并在创建对象后调用它.
有没有其他优雅的方式来做我想要的?
您可以使用以下内容:
class Base {
public:
explicit Base(string name) : agg(new Aggregate(name)) {}
protected:
Base() = default;
private:
std::unique_ptr<Aggregate> agg;
};
class Derived : Base {
public:
// implicit call to Base(), you may be explicit if you want
Derived(string name) : agg2(new Aggregate2(name)) {}
private:
std::unique_ptr<Aggregate2> agg2;
};
Run Code Online (Sandbox Code Playgroud)