enable_shared_from_this
是一个C++编程中的辅助模板类,用于实现类似于std::shared_ptr
的智能指针功能。它的主要用途是在类的成员函数中创建std::shared_ptr
智能指针,指向当前对象。这在实现类似于异步回调函数、多线程任务等场景时非常有用,因为它可以确保当前对象不会在执行过程中被意外删除。
使用enable_shared_from_this
的步骤如下:
std::shared_ptr
管理的类继承自std::enable_shared_from_this<YourClass>
。std::shared_from_this()
函数获取当前对象的std::shared_ptr
。需要注意的是,enable_shared_from_this
只能与std::shared_ptr
一起使用,不能与std::unique_ptr
或裸指针一起使用。
示例代码:
#include<iostream>
#include<memory>
#include<thread>
#include<chrono>
class MyClass : public std::enable_shared_from_this<MyClass> {
public:
std::shared_ptr<MyClass> getSharedPtr() {
return shared_from_this();
}
};
int main() {
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>();
std::thread([ptr]() {
std::this_thread::sleep_for(std::chrono::seconds(3));
std::shared_ptr<MyClass> new_ptr = ptr->getSharedPtr();
}).detach();
return 0;
}
在这个示例中,MyClass
继承自std::enable_shared_from_this<MyClass>
,并使用shared_from_this()
函数获取当前对象的std::shared_ptr
。在main
函数中,创建一个MyClass
对象的std::shared_ptr
,并在一个新线程中使用getSharedPtr()
函数获取该对象的std::shared_ptr
。这样可以确保在新线程中,当前对象不会被意外删除。
领取专属 10元无门槛券
手把手带您无忧上云