通过使用自定义删除器,std::unique_ptr能够在释放资源时执行特定的清理操作,从而帮助节省内存并提升性能 voidcustomDeleter(int*ptr) {//自定义删除逻辑deleteptr; } std::unique_ptr<int, decltype(&customDeleter)> ptr(newint(5), customDeleter); #include <iostream>#include<memory>usingnamespacestd;voidcu...
{//1. unique_ptr的初始化//1.1 通过裸指针创建unique_ptr(由于unique_ptr的构造函数是explicit的,必须使用直接初始化,不能做隐式类型转换)std::unique_ptr<Widget> ptr1(newWidget);//ok; 直接初始化//std::unique_ptr<Widget> ptr1 = new Widget();//error。不能隐式将Widget*转换为unqiue_ptr<Widget...
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...
get(); // 未定义行为,可能崩溃 // 解释:使用std::move后,ptr1不再拥有资源,直接使用ptr1.get()并尝试删除是错误的,因为此时它可能为nullptr。 // 避免直接使用new - 反例:直接使用new而不通过std::make_unique std::unique_ptr<int> ptr(new int(42)); // 不推荐 // 解释:尽管这样可以工作,但...
总结一下,就是通过右侧或形参为shared_ptr的赋值操作、初始化操作,会增加所有涉及的share_ptr的引用计数增加且值相同;而q=std::move(p)则只会将参数p的全部家资移交给左侧的q,除了p、q,不会改变其他有关share_ptr的引用计数。 四、 weak_ptr 使用weak_ptr时,不会增加所指资源的引用计数,但会引起另一个隐患...
1. get()方法,返回指向所管理对象的指针。这个方法可以用于获取底层指针,但需要小心使用,因为在unique_ptr生命周期结束后,返回的指针将变成悬空指针。 2. release()方法,释放unique_ptr对所管理对象的所有权,并返回指向该对象的指针。调用release()后,unique_ptr不再拥有该对象,可以用于将unique_ptr交给其他智能指针...
(3)unique_ptr 独占智能指针类也有一个 reset 方法,函数原型如下: void reset( pointer ptr = pointer() ) noexcept; 1. 使用reset 方法可以让 unique_ptr 解除对原始内存的管理,也可以用来初始化一个独占的智能指针。 eg: int main() { unique_ptr<int> ptr1(new int(10)); ...
您可以使用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; } ...
unique_ptr的使用方法很简单,首先需要包含头文件<memory>,然后使用std::unique_ptr<T>来定义一个unique_ptr对象,其中T是指向的类型。例如,可以定义一个指向int类型的unique_ptr对象如下: std::unique_ptr<int> ptr(new int); 这个语句中,new int会返回一个指向int类型的动态分配内存的指针,并将它传递给unique_...
方法/步骤 1 调用unique_ptr,创建空智能指针,然后再调用函数reset来绑定对象,这里绑定的是字符串指针对象 2 调用unique_ptr对象输出打印信息看,成功输出绑定对象的内容 3 创建智能指针的时候直接绑定对象,而不是空的 4 调用智能指针,同样能够输出绑定对象的内容 5 调用智能指针的函数release可以释放所有权,这里...