shared_ptr 置空 1. 解释什么是 shared_ptr shared_ptr 是C++标准库中的一个智能指针,用于自动管理具有动态生命周期的对象。它通过引用计数机制来确保当没有任何 shared_ptr 指向某个对象时,该对象会被自动删除,从而避免内存泄漏。每个 shared_ptr 都有一个与之关联的引用计数,每当一个新的 shared_ptr 被创建并...
在上述代码中,我们首先创建了一个shared_ptr对象ptr,并通过new关键字为其分配了一个int类型的动态对象。然后,我们通过reset()函数将ptr置为空指针,并在if语句中判断ptr是否为空指针。由于reset()函数释放了动态对象的内存,ptr成为空指针,因此if语句的条件成立,输出"ptr为空指针"。 reset()函数还可以接受一个指针...
shared_ptr<int> sp2 = make_shared<int>(42);//声明一个指向int类型的智能指针,并将其初始化为42,sp2这个智能指针的引用计数值应该是1std::cout <<"这个智能指针内保存的值是:"<< *sp2 <<",它的引用计数器的值是:"<< sp2.use_count() <<std::endl; sp1= sp2;//无论何时,拷贝一个shared_ptr...
这里初始化为0对应的是将该指针变量置空,当前shared_ptr未指向任何对象
// 将当前对象置空 voidreset() { My_shared_ptr().swap(*this);// swap后,this有了临时对象的资源,即被置空了,临时对象有了this的资源,出作用域被析构 } voidreset(T*Px) { My_shared_ptr(Px).swap(*this); } T&operator*()const{return*get(); } ...
voidswap(my_shared_ptr&other)noexcept{this->Swap(other);}// 资源置空,和空shared_ptr() 交换...
(2)从具备所有权的指针出发构造一个std::shared_ptr时,会创建一个控制块。(如std::unique_ptr转为shared_ptr时会创建控制块,因为unique_ptr本身不使用控制块,同时unique_ptr置空) (3)当std::shared_ptr构造函数使用裸指针作为实参时,会创建一个控制块。这意味从同一个裸指针出发来构造不止一个std::shared_...
std::shared_ptr<C> pc = std::make_shared<C>();std::shared_ptr<B> pb = std::make_shared<B>();pc->SetPB(pb);pb->SetPC(pc);return 0;} 上⾯的代码中,B和C均不能正确析构,正确的做法是,在B和C的释放函数,如Close中,将其包含的shared_ptr置空。这样才能解开引⽤链。⼆. ...
unique_ptr 采用的是独享所有权语义,一个非空的unique_ptr总是拥有它所指向的资源。转移一个unique_ptr将会把所有权全部从源指针转移给目标指针,源指针被置空;原因是删除了拷贝构造函数和赋值运算符。 如果将一个右值赋值给unique_ptr对象,则可以编译通过,如果想使p2=p1通过编译,则可以使用move将左值转换为右值。
*/ /** 移动构造函数 与 复制构造函数的区别:从一个 已有 std::shsred_ptr移动构造一个新的 std::shared_ptr会将 源 std::shared_ptr置空,这意味着一但新的...::auto_ptr指针)出发构造一个 std::shared_ptr时,会创建一个控制块 3,std::...