繁体   English   中英

将 unique_ptr 转换为 void* 并返回,我需要释放吗?

[英]Convert unique_ptr to void* and back, do I need to free?

在我的代码中,我使用了一个库,它有一个 function store_pointer接受void*并将其保存在 memory 中。 然后还有另一个 function retrieve_pointer()将这个void *返回给我,我无法控制这个库,所以我无法更改 function 的行为方式。

现在我需要将一个变量传递给这个 function 并取回指针,我的代码设置如下:

struct Task
{
    int mId;
    Task(int id ) :mId(id)
    {
        std::cout<<"Task::Constructor"<<std::endl;
    }
    ~Task()
    {
        std::cout<<"Task::Destructor"<<std::endl;
    }
};

std::unique_ptr<Task> taskPtr(new Task(23));
store_pointer(&taskPtr);

// do stuff that doesn't involve taskPtr

Task *new_taskPtr = reinterpret_cast<Task *>(retrieve_pointer());

// do stuff with new_taskPtr pointer

现在这一切正常,但我想知道是否需要删除*new_taskPtr指针,或者reinterpret_cast是否“恢复”指向unique_ptr的指针,因此 memory 将在超出范围/程序结束时自动删除。

 std::unique_ptr<Task> taskPtr(new Task(23));

当此变量超出 scope 时,动态分配将被删除。 没有必要,而且你不能自己删除它,除非你在唯一指针上调用release ,这是从唯一指针转移所有权的唯一方法(除了将所有权转移到另一个唯一指针之外)。

你可能做的任何演员都对此没有影响。

您正在存储对 unique_ptr 的引用:

store_pointer(&taskPtr);

只要您不移动 taskPtr 或不弄乱它的内部指针,您就是安全的并且不需要delete

请注意,如果taskPtr早于用户退出 scope,您将有悬空引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM