[英]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.