通过使用自定义删除器,std::unique_ptr能够在释放资源时执行特定的清理操作,从而帮助节省内存并提升性能 voidcustomDeleter(int*ptr) {//自定义删除逻辑deleteptr; } std::unique_ptr<int, decltype(&customDeleter)> ptr(newint(5), customDeleter); #include <iostream>#include<memory>usingnamespacestd;voidcu...
printf("ptr address: %p | num: %d\n", &ptr, ptr->m_num); dowork(std::move(ptr));//二级引用做参数,操作的是本身,std::move不会释放智能指针对象if( ptr ==nullptr ) { printf("Ptr is Null.\n"); } towork(ptr);//引用传递,智能指针直接做为参数,可不用作为右值传递,if( ptr ==nu...
您可以使用make_unique來建立unique_ptr數位的 ,但無法用來make_unique初始化陣列元素。 C++ // Create a unique_ptr to an array of 5 integers.autop = make_unique<int[]>(5);// Initialize the array.for(inti =0; i <5; ++i) { p[i] = i; wcout << p[i] <<endl; } ...
get(); // 未定义行为,可能崩溃 // 解释:使用std::move后,ptr1不再拥有资源,直接使用ptr1.get()并尝试删除是错误的,因为此时它可能为nullptr。 // 避免直接使用new - 反例:直接使用new而不通过std::make_unique std::unique_ptr<int> ptr(new int(42)); // 不推荐 // 解释:尽管这样可以工作,但...
auto p= std::shared_ptr(r); 二、什么场合使用shared_ptr 就是一个指针所指的资源会用于多个地方时,如一个学生,属于一个行政班、还加入了多个社团,还住在某个宿舍,以及在多个课程的名单里。 需要谨慎处理的情况就是,如果由于使用场景可能会引起循环依赖,则需要weak_ptr. 如参考资料2中的Person类的两个对象都...
unique_ptr虽然没有支持普通的拷贝和赋值操作,但却提供了一种移动机制来将指针的所有权从一个unique_ptr转移给另一个unique_ptr。如果需要转移所有权,可以使用std::move()函数。 示例: int main() { unique_ptr<int> pInt(new int(5)); unique_ptr<int> pInt2 = std::move(pInt); // 转移所有权 ...
void reset( pointer ptr = pointer() ) noexcept; 1. 使用reset 方法可以让 unique_ptr 解除对原始内存的管理,也可以用来初始化一个独占的智能指针。 eg: int main() { unique_ptr<int> ptr1(new int(10)); unique_ptr<int> ptr2 = move(ptr1); ...
1 调用unique_ptr,创建空智能指针,然后再调用函数reset来绑定对象,这里绑定的是字符串指针对象 2 调用unique_ptr对象输出打印信息看,成功输出绑定对象的内容 3 创建智能指针的时候直接绑定对象,而不是空的 4 调用智能指针,同样能够输出绑定对象的内容 5 调用智能指针的函数release可以释放所有权,这里将智能指针...
unique_ptr在 C++ 标准库的<memory>标头中定义。 它与原始指针一样高效,可在 C++ 标准库容器中使用。 将unique_ptr实例添加到 C++ 标准库容器很有效,因为通过unique_ptr的移动构造函数,不再需要进行复制操作。 示例1 以下示例演示如何创建unique_ptr实例并在函数之间传递这些实例。
Aunique_ptr不會共用它的指標。不能複製到另一個unique_ptr,傳值方式傳遞至函式 (除非它是可修改的右值),或設成可複製所需的任何標準樣板程式庫 (STL) 演算法中使用。Aunique_ptr只能移動。這表示將記憶體資源的擁有權轉移到新unique_ptr和原本unique_ptr不再擁有它。我們建議您限制物件只能在一個擁有者,因為...