Bre*_*men -1 c++ pointers std c++11
我目前正在重构代码的一些旧部分。我正在研究的方法大量使用new和delete功能来实现其目的。我可以轻松地用共享指针替换所有这些,以获得更好的代码清晰度和安全性。问题是,最终我需要返回一个指向已分配内存的指针以匹配 API。这不适用于共享指针。
我可以分配一个新的内存块并new复制分配的内存内容shared_ptr(我的第一个想法)。但后来我想也许有一种机制可以告诉shared_ptr不要在上下文丢失时释放分配的内存?这样我就可以通过共享 ptr 返回指向已分配内存的指针,而无需释放它。
如果您要将 替换new为std::unique_ptr,则可以使用std::unique_ptr::release来获取原始指针的所有权(这样您就可以返回它):
T* oldfn() {
T* ptr = new T(args...);
// use `ptr`
delete ptr;
T* ptr2 = new T(args...);
// use `ptr2`
return ptr2;
}
// Becomes
T* newfn() {
std::unique_ptr<T> ptr{ new T(args...) };
// use `ptr.get()`
// RAII will delete
std::unique_ptr<T> ptr2{ new T(args...) };
// use `ptr2.get()`
return ptr2.release();
}
Run Code Online (Sandbox Code Playgroud)
您无法使用共享指针轻松地做到这一点,因为共享指针本身并不拥有该指针,因为您可以复制指向同一资源的共享指针,因此通过一个指针释放所有权是很困难的。