描述:
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()
{
//构造1
std::shared_ptr<CTest> ap1(new CTest(1));
ap1->Show();
//构造2
std::shared_ptr<CTest> ap2 = std::make_shared<CTest>(2);
ap2->Show();
//构造3
CTest* 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;
}