class B { public: B(int value) : value_(value) {} int getValue() const { return value_; } private: int value_; }; class A { public: void setB(shared_ptr<B> b) { pb_ = b; } void doSomething() { if (auto p = pb_.lock()) cout << "A::doSomething() called, B's value is " << p->getValue() << endl; else cout << "B has been deleted" << endl; } private: weak_ptr<B> pb_; }; int main() { shared_ptr<A> pa = make_shared<A>();//先创建对象A和B shared_ptr<B> pb = make_shared<B>(42); pa->setB(pb);//将对象B传递给A(这里使用weak_ptr传递) pa->doSomething(); pb.reset(); pa->doSomething(); return 0; }注释
时间: 2024-03-30 17:38:47 浏览: 32
C++中const的特性的使用
这段代码是关于 C++ 中智能指针的使用示例。类 B 表示一个带有一个 int 类型成员 value_ 的类,类 A 中使用 weak_ptr 来持有一个 B 类型的对象的引用,同时也提供了一个接口 setB 来设置 B 类型对象的引用。在 main 函数中,首先创建了 A 和 B 类型的对象,然后将 B 对象传递给 A 对象(使用 weak_ptr 传递),并调用了 A 对象的 doSomething 函数打印 B 对象的 value_ 值。接着,调用 reset 函数将 B 对象的引用计数减一,此时 B 对象的引用计数为 0,会被自动销毁。再次调用 A 对象的 doSomething 函数时,由于 B 对象已经被销毁,会打印出 "B has been deleted"。
阅读全文