gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:16:13 34 4
gpt4 key购买 nike

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

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

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 因此,当超出范围/程序结束时,内存将被自动删除。

最佳答案

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

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

您所做的任何转换对此都没有影响。

关于c++ - 将 unique_ptr 转换为 void* 并返回,我需要释放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58770761/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com