enable_shared_from_this
Question:有一个类,这个类的对象是使用shared_ptr 管理的,在类内某个成员函数里,我们需要获取指向当前对象的 shared_ptr,应该如何获取?
可能的答案 1:
1 | class A { |
但是这样做是不安全的。在 get_ptr 中,会根据 this 指针创建一个完全独立的新的std::shared_ptr,这个 shared_ptr 有自己的引用计数,完全独立于当前类对象的 shared_ptr;这时这两个 shared_ptr 是同时在管理这个对象,如果新的这个shared_ptr 计数清零,它会尝试删除这个对象,造成未定义的行为。
正确的做法就是使用std::enable_shared_from_this
std::enable_shared_from_this是一个模板类,可以在类的内部,安全的获取自身对象的 shared_ptr。
1 |
|
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment