我有了一個指針作爲成員的struct所有權計數:我如何才能增加的std ::共享指針
struct MyStruct {
char *ptr;
}
我想初始化的範圍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;
}
但後來我不得不刪除它,這是容易出錯,我寧願避免這樣做。所以我想用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
}
}
所以,我怎麼能這樣做呢?我應該如何將shared_ptr分配給mystruct.ptr以使所有權計數變爲2?我看到get()不起作用,因爲它只是傳遞指針,但不能提供所有權,所以它被刪除。
正如你所看到的,這裏的主要動機是延長壽命,所以我願意接受其他實踐。也許我錯在想在這裏使用shared_ptr?
通過設置一個共享指針(或唯一指針,除非您特別需要共享所有權),您將「擴展所有權」爲「mystruct.ptr」。這就是共享指針的工作原理。無法從原始指針獲取自動所有權語義。 –
我無法修改mystruct。因此,對於原始指針,我必須使用新的刪除? –
是的。這就是爲什麼你不應該使用原始指針來表示動態資源的所有權。如果你出於某種原因無法修復它,那麼你必須自己仔細刪除它。或者安排別的東西來擁有它,並像邪惡的指針一樣長存。 –