1.shared_ptr 1.1 shared_ptr介绍 shared_ptr主要用于托管动态分配的内存。 在程序中动态分配了一块内存,这块内存可以是变量可以是对象,为了避免内存泄露,我们必须在整个程序的所有可能跑到的分支,保证这块内存不用了之后可以得到正确的释放。 普通指针使用起来麻烦,而且使用不当还很有可能出现程序崩溃,比如指针未释放导致内存泄漏、
shared_ptr是最像指针的智能指针,在很多的组件中被应用,shared_ptr包装了new操作符在堆上分配的动态对象,实现的是引用计数型的智能指针,可以被自由的拷贝和赋值,当没有代码使用(引用计数减为0)时会删除包装的动态分配的对象。 shared_ptr也可以安全地放在标准的容器中,是在STL容器中存储指针的最标准解法。 原理 ...
使用unique_ptr表达资源唯一性; 使用shared_ptr管理共享资源; 使用weak_ptr避免循环引用与悬挂指针; 避免将智能指针与裸指针混用; 熟练掌握它们的语义、生命周期与线程影响。 智能指针是现代 C++ 项目中资源管理的首选方式。通过深入掌握其使用技巧,你可以写出更安全、健壮、现代化的 C++ 程序。
创建和使用 std::shared_ptr #include <iostream> #include <memory> // 需要包含此头文件 #include <vector> void example() { // 创建一个 std::shared_ptr 管理动态分配的 int 对象 std::shared_ptr<int> ptr1 = std::make_shared<int>(10); // 使用智能指针 std::cout << "Value: " <<...
方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom");...
《为何优先选用unique_ptr而不是裸指针?》中说到,如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多。shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时,该对象也就会自动销毁。因此,善用shared_ptr,能够远离内存泄漏。
shared_ptr的使用方法如下:1.头文件 要使用shared_ptr,需要包含头文件<memory> 2.创建shared_ptr对象 可以通过构造函数或make_shared()函数创建shared_ptr对象。构造函数的参数是指向动态分配的内存的指针,make_shared()函数的参数是动态分配的对象类型的构造函数参数。例如:```int* p = new int{10};std::...
使用sharedpreferences删除数据 shared_ptr删除器,还能够传递第二个參数给shared_ptr的构造函数,它被称为删除器(deleter)。删除器用于处理共享资源的释放。这对于管理那些不是用new分配也不是用delete释放的资源时很实用。shared_ptr被创建后。就能够像普通指针一样使用
普通的指针可以指向一个使用new []操作符创建的动态数组,智能指针也可以。 shared_ptr<float>a(newfloat[1024]); 无论是new float,还是new float[1024],所得到的都是float*,也就是说,上述代码中的智能指针a并不知晓其指向的是一个动态对象,还是由多个动态对象构成的数组。根据第8章的讨论,new [ ]所返回的...