shared_ptr<Test> tsp = make_shared<Test>(11);cout<< tsp.use_count() <<endl;//1//tsp1和tsp指向相同的对象,这个对象的计数器加1shared_ptr<Test>tsp1(tsp);cout<< tsp.use_count() <<endl;//2//用tsp1改变了对象的data的值,所以用tsp再访问这个对象,发现对象被改变了tsp1->setData(111); ...
拷贝构造函数assert(sp == sp2 && sp.use_count() ==2);//两个shared_ptr相等,指向同一个对象,引用计数为2*sp2 =100;//使用解引用操作符修改被指对象assert(*sp ==100);//另一个shared_ptr也同时被修改sp.reset(
参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset()赋值为另一指针。
std::shared_ptr<int> a = std::make_shared<int>(3); std::shared_ptr<char> b = std::make_shared<char>('a'); std::cout <<"shared_ptr object(int) size = "<<sizeof(a) << std::endl; std::cout <<"shared_ptr object(char) size = "<<sizeof(b) << std::endl; std::weak...
每个shared_ptr 对象在内部指向两个内存位置 指向对象的指针 用于控制引用计数数据的指针 计数变化规则 当新的 shared_ptr 对象与指针关联时,则在其构造函数中,将与此指针关联的引用计数增加1。 当任何 shared_ptr 对象超出作用域时,则在其析构函数中,它将关联指针的引用计数减1。如果引用计数变为0,则表示没有...
shared_ptr可以使用一个new表达式返回的指针进行初始化。 1 2 3 4 cout<<"test shared_ptr and new:"<<endl; shared_ptr<int>p4(newint(1024)); //shared_ptr<int> p5 = new int(1024); // wrong, no implicit constructor cout<<*p4<<endl; ...
1、shared_ptr智能指针的创建 shared_ptr 类模板中,提供了多种实用的构造函数,这里给读者列举了几个常用的构造函数(以构建指向 int 类型数据的智能指针为例)。 1) 通过如下 2 种方式,可以构造出 shared_ptr 类型的空智能指针: 注意,空的 shared_ptr 指针,其初始引用计数为 0,而不是 1。
在C++中,传递指针和引用是常见的操作,而使用vector<shared_ptr<string>>可以更方便地管理动态字符串的集合。本文将总结这些概念的用法和特点,并给出一些实际应用的示例。 传递指针 在C++中,传递指针可以让函数直接修改原始数据,而不需要进行完整的复制。这样可以节省内存和提高程序的性能。下面是一个简单的示例: ...
shared_ptr需要记住一句话,它可以允许多个指针指向同一个对象。 1.1 使用举例 我们可以使用如下的方式来声明一个智能指针,这个指针指向int类型的指针,我把它命名为ptr1,目前这个指针是默认初始化的形式,保存的是一个空指针。 shared_ptr<int>ptr1; 当然我们要为这个指针指向一块动态分配的内存,该用什么样的方式来...