boost::enable_shared_from_this

#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,对象被析构
posted @ 2021-03-13 16:49  osbreak  阅读(449)  评论(0)    收藏  举报