#include<iostream>#include<memory>intmain(){// 创建一个 shared_ptr,指向动态分配的整数std::shared_ptr<int> sharedInt =std::make_shared<int>(42);// 输出原始指针的值std::cout<< *sharedInt <<std::endl;// 输出 42// 重新分配 shared_ptr 的指针,同时释放原有资源sharedInt.reset(newint(100...
std::shared_ptr<Person> p1(newPerson(1));//Person(1)的引用计数为1std::shared_ptr<Person> p2 = std::make_shared<Person>(2);p1.reset(newPerson(3));//首先生成新对象,然后引用计数减1,引用计数为0,故析构Person(1)//最后将新对象的指针交给智能指针std::shared_ptr<Person> p3 = p1;//...
由上面可知,当指向一个对象的最后一个shared_ptr对象被销毁时,shared_ptr类会自动销毁此对象。shared_ptr类是通过析构函数来完成销毁工作的 内存浪费:因为只有在销毁掉最后一个shared_ptr时,该指针所指向的内存才会释放,因此如果你忘记了销毁程序不再需要的shared_ptr,程序仍然正在执行,那么就造成内存浪费 六、shared...
在上述代码中,我们首先创建了一个shared_ptr对象ptr,并通过new关键字为其分配了一个int类型的动态对象。然后,我们通过reset()函数将ptr置为空指针,并在if语句中判断ptr是否为空指针。由于reset()函数释放了动态对象的内存,ptr成为空指针,因此if语句的条件成立,输出"ptr为空指针"。 reset()函数还可以接受一个指针...
ptr.reset(new T()); // 原来所指的对象会被销毁 3.2.make_shared辅助函数创建 std::shared_ptr<int> foo = std::make_shared<int> (10); 建议使用make_shared的方式构造 3.3 自定义所指堆内存的释放规则 在初始化 shared_ptr 智能指针时,还可以自定义所指堆内存的释放规则,这样当堆内存的引用计数为 0...
reset函数有两种形式,一种是不带参数的形式,另一种是带参数的形式。 不带参数的reset函数会将智能指针的指向对象清空,即将其置为空指针。例如: ``` std::shared_ptr<int> ptr(new int(10)); ptr.reset(); //重置智能指针,将其指向对象清空 ``` 带参数的reset函数会将智能指针的指向对象改为新的对象。
shared_ptr1.reset(); //会使用~obj()函数进行删除 std::shared_ptr<obj> shared_ptr2(new obj(88)); shared_ptr2.reset(new obj(33), [](obj* p1){ std::cout<<"in reset" << " addr " << (long)p1 <<std::endl; delete p1; }); ...
shared_ptr<int> p(new int(42)); // 使用p指向的对象 p.reset(); // 释放内存 ``` reset函数还可以接受一个新的指针作为参数,用于重新设置shared_ptr指向的对象。当我们需要改变shared_ptr指向的对象时,可以调用reset函数传入新的指针。这样,shared_ptr将开始管理新的对象,并在适当的时候释放旧对象的内存...
shared_ptr<int>sp;//声明一个指向int类型的智能指针sp.reset(newint(42));auto sp1=make_shared<string>("hello");//sp1是一个智能指针shared_ptrsp2(newint(42)); 而make_shared方式是推荐的一种,它使用一次分配,比较安全。 哪些操作会改变计数 ...