我正在实现一个单例类作为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以禁止从调用者重置。