如何在保持构造函数私有的同时用std::make_unique构建单例?

hi,大家好,我遇到了一个问题
我尝试使用std::unique_ptr制作一个单例,
我希望通过 std::make_unique构建这个智能指针,
我发现当构造函数是私有的时候会报告编译错误,共有则不会。
这是为啥呀?

class StorageHelper
{
private:
    StorageHelper() = default;
    ~StorageHelper() = default;
    static std::unique_ptr<StorageHelper> _mStorageHelperPtr;
public:
    static StorageHelper *getInstance()
    {
        if(_mStorageHelperPtr==nullptr)
        {
            _mStorageHelperPtr = std::make_unique<StorageHelper>();
        }
        return _mStorageHelperPtr.get();
    }
};

我尝试把构造函数改成共有的,就不会有问题了
但我还是不想暴露构造函数,也想用make_uinque

阅读 809
1 个回答

可以加友元

#include<memory>
class StorageHelper
{
private:
    StorageHelper() = default;
    ~StorageHelper() = default;
    static std::unique_ptr<StorageHelper> _mStorageHelperPtr;
    friend std::unique_ptr<StorageHelper> std::make_unique<StorageHelper>();
    friend std::default_delete<StorageHelper>;
public:
    static StorageHelper *getInstance()
    {
        if(_mStorageHelperPtr==nullptr)
        {
            _mStorageHelperPtr = std::make_unique<StorageHelper>();
        }
        return _mStorageHelperPtr.get();
    }
};
推荐问题
宣传栏