#include <boost/smart_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <iostream>
class MyClass : public boost::enable_shared_from_this<MyClass> {
public:
MyClass(int value) : value_(value) {
std::cout << "MyClass(" << value_ << ") 构造\n";
}
~MyClass() {
std::cout << "MyClass(" << value_ << ") 析构\n";
}
// 安全地返回指向自身的 shared_ptr
boost::shared_ptr<MyClass> get_ptr() {
return shared_from_this(); // 正确方式
}
void do_something() {
std::cout << "Value: " << value_ << std::endl;
}
private:
int value_;
};
int main() {
// 必须通过 shared_ptr 创建对象
boost::shared_ptr<MyClass> ptr1 = boost::make_shared<MyClass>(42);
// 在对象内部获取 shared_ptr
boost::shared_ptr<MyClass> ptr2 = ptr1->get_ptr();
std::cout << "ptr1.use_count() = " << ptr1.use_count() << std::endl; // 输出 2
std::cout << "ptr2.use_count() = " << ptr2.use_count() << std::endl; // 输出 2
ptr2->do_something();
return 0;
} // ptr1 和 ptr2 同时离开作用域,引用计数归 0,对象被析构