全部,
我正在使用 C++14,并且正在制作或多或少的标准 Singleton。我正在使用最新的 Visual Studio 2017。此代码有效:
#include <memory>
class A
{
public:
static A& getInstance()
{
if (instance == nullptr)
instance = std::unique_ptr<A>(new A());
return *instance;
}
private:
A() {}
static std::unique_ptr<A> instance;
};
std::unique_ptr<A> A::instance = nullptr;
但是,当我将单例实例的创建更改为:
instance = std::make_unique<A>();
我得到一个编译错误,我试图访问一个私有成员:
Error C2248 'A::A': cannot access private member declared in class 'A'
c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.14.26428\include\memory 2510
这对我来说就像一个错误,因为这两种形式在功能上应该是相同的?想法?