更新时间:2021-08-06 18:51:01
执行删除的不是unique_ptr
本身,而是删除器。因此,如果您想使用friend
方法,您必须这样做:
friend std::unique_ptr<SingletonFactory>::deleter_type;
但是,我认为不能保证默认删除程序不会将实际delete
委托给另一个函数,这会破坏这一点。
相反,您可能希望提供自己的删除程序,可能如下所示:
class SingletonFactory {
static std::unique_ptr<SingletonFactory, void (*)(SingletonFactory*)> volatile instance;
public:
static SingletonFactory& getInstance();
private:
SingletonFactory();
SingletonFactory(
const SingletonFactory& ingletonFactory
);
~SingletonFactory();
void deleter(SingletonFactory *d) { d->~SingletonFactory(); free(d); }
};
在创建函数中:
SingletonFactory* volatile tmp = (SingletonFactory*) malloc(sizeof(SingletonFactory));
new (tmp) SingletonFactory; // placement new
instance = decltype(instance)(tmp, &deleter);