小编ale*_*yav的帖子

基本访问中的工厂方法保护ctor in derived

我希望所有派生的对象都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)

我想避免宣布每个派生阶级的朋友,我该怎么办?

c++ constructor factory shared-ptr

6
推荐指数
1
解决办法
125
查看次数

标签 统计

c++ ×1

constructor ×1

factory ×1

shared-ptr ×1