Mer*_*tce 1 c++ smart-pointers object-lifetime lifetime-scoping
我有一个具有指针作为成员的结构:
struct MyStruct {
char *ptr;
}
Run Code Online (Sandbox Code Playgroud)
我想在一个范围内初始化 ptr,然后能够在该范围之外使用它:
{ // scope 0
{ //scope 1
{ // scope 2
mystruct.ptr = new char[100];
}
// mystruct.ptr still lives here
}
// i dont need mystruct anymore
delete[] mystruct.ptr;
}
Run Code Online (Sandbox Code Playgroud)
但后来我必须删除它,这很容易出错,我宁愿避免这样做。所以我想到使用std::shared_ptr.
{ // scope 0
{ //scope 1
{ // scope 2
auto a = std::make_shared<char>(new char[100]);
mystruct.ptr = a.get(); // ??????? HOW TO ASSIGN
}
// mystruct.ptr still SHOULD live here
}
}
Run Code Online (Sandbox Code Playgroud)
那么,我该怎么办呢?我应该如何将shared_ptr分配给mystruct.ptr以使所有权计数变为2?我看到 get() 不起作用,因为它只是传递指针但不给出所有权,因此它被删除。
如您所见,这里的主要动机是延长寿命,因此我对其他做法持开放态度。也许我在这里使用shared_ptr的想法是错误的?
除了将 std::shared_ptr 分配给另一个 std::shared_ptr 实例之外,没有合法的方法可以增加 std::shared_ptr 的所有权计数器。无论如何它都不能解决你的问题。在您的情况下,您必须处理正确的 new/malloc 和释放/删除已用内存。如果你操作一个share_ptr,你必须注意你也减少它,否则你会出现内存泄漏。情况是一样的。