我希望所有派生的对象都Initable要求terminate()销毁.为此,我创建了一个shared_ptr自定义删除器.
我的问题是我无法访问派生类的受保护的ctor,以便在Initable工厂方法中创建实例.
应该保护ctor,以防止在不使用工厂方法的情况下创建实例.
class Initable {
public:
virtual void terminate() = 0;
template<typename T, typename... Ts>
static shared_ptr<T> make_initable(const Ts &... args) {
return shared_ptr<T>(new T(std::forward<const Ts>(args)...), [] (Initable * aptr) {
cout << "custom deleter" << endl;
});
}
};
class B : public Initable {
friend class Initable;
// ...
};
Run Code Online (Sandbox Code Playgroud)
我想避免宣布每个派生阶级的朋友,我该怎么办?