为什么make_unique失败了私有构造函数?

时间:2018-02-14 05:57:00

标签: c++ c++14

我正在实现一个单例类作为c ++ 14中的练习,其中必须使用智能指针。这段代码片段有效,但我想使用make_unique,不要混淆旧的new和delete关键字,但它说它无法访问私有成员。为什么会这样?是关键字' new'安全使用智能指针?

#include <iostream>
#include <memory>

using namespace std;

class foo
{
    private:
        int val_;

    private:    
        foo() {}

    public:
        // properties
        void set(const int v) { val_ = v; }
        int  get() const { return val_; }

        //methods
        static const unique_ptr<foo>& get_instance()
        {
            static unique_ptr<foo> pfoo( new foo() );
            //unique_ptr<foo> pfoo = make_unique<foo>() ;  // Error - cannot access private member declared in class 'foo'
            return pfoo;        
        }


};

int main()
{
    foo::get_instance()->set(100);
    cout << foo::get_instance()->get() <<endl;
}

编辑:get_instance()声明为const以禁止从调用者重置。

0 个答案:

没有答案