小编Cha*_*nya的帖子

使用私有析构函数创建仅shared_ptr的类?

我有一个在线程之间传递的数据类。我希望这个类成为std::shared_ptr唯一一个不能通过从外部调用其析构函数来销毁的类,因此我也希望析构函数是私有的。我目前的解决方案是

template<typename T>
struct DestructorHelper
{
    static void Destroy(void* v) { delete static_cast<T*>(v); }
};

class SharedOnly
{
public:
    SharedOnly(const SharedOnly& other) = delete; // deleted copy constructor
    SharedOnly& operator=(const SharedOnly& other) = delete; // deleted copy assignment operator
    SharedOnly(SharedOnly&& other) = delete; // deleted move constructor
    SharedOnly& operator=(SharedOnly&& other) = delete; // deleted move assignment operator

    static std::shared_ptr<SharedOnly> create()
    {
        auto objPtr = new SharedOnly;
        auto desPtr = &DestructorHelper<SharedOnly>::Destroy;
        std::shared_ptr<SharedOnly> shared(objPtr, desPtr);
        return shared;
    }

private:
    SharedOnly() …
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr c++20

1
推荐指数
1
解决办法
182
查看次数

标签 统计

c++ ×1

c++20 ×1

shared-ptr ×1