描述:
std::shared_ptr
是c++标准库中的一个模板类,它提供了自动化的内存管理,通过共享引用计数的方式来管理动态分配的对象。这意味着多个std::shared_ptr
可以共享同一个对象,并在不再需要时自动释放它。
构造:
#include <iostream>
#include <memory>class CTest
{
public:CTest(int n) {m_n = n;std::cout << "构造 " << this << std::endl;}~CTest() {std::cout << "析构 " << this << std::endl;}void Show() {std::cout << m_n << std::endl;}private:int m_n;
};int main()
{//构造1std::shared_ptr<CTest> ap1(new CTest(1));ap1->Show();//构造2std::shared_ptr<CTest> ap2 = std::make_shared<CTest>(2);ap2->Show();//构造3CTest* p1 = new CTest(3);std::shared_ptr<CTest> ap3(p1);ap3->Show();return 0;
}
自定义删除器:
在某些情况下,我们可能需要在std::shared_ptr
销毁对象时执行自定义的清理操作。这可以通过提供自定义的删除器函数或函数对象来实现。删除器函数将在对象销毁时被调用,并负责执行所需的清理操作。
#include <iostream>
#include <memory>class CTest
{
public:CTest() {m_n = 0;std::cout << "构造 " << this << std::endl;}~CTest() {std::cout << "析构 " << this << std::endl;}void Show() {std::cout << m_n << std::endl;}private:int m_n;
};int main()
{CTest* p = new CTest[10];std::cout << "--------------------" << std::endl;std::shared_ptr<CTest> ap(p, [](CTest* ptr) {delete[] ptr; });return 0;
}