weakptr用法举例
时间: 2024-05-03 09:23:03 浏览: 52
max+plusII设计举例
weak_ptr是一种智能指针,用于避免指向已经被删除的对象的悬空指针的问题。它通常与shared_ptr一起使用。
以下是一个使用weak_ptr的示例:
```
#include <iostream>
#include <memory>
class TestClass {
public:
TestClass() { std::cout << "TestClass constructor called.\n"; }
~TestClass() { std::cout << "TestClass destructor called.\n"; }
};
int main() {
std::shared_ptr<TestClass> sharedPtr(new TestClass);
std::weak_ptr<TestClass> weakPtr = sharedPtr;
if (!weakPtr.expired()) {
std::cout << "weakPtr points to an object.\n";
} else {
std::cout << "weakPtr does not point to an object.\n";
}
sharedPtr.reset();
if (!weakPtr.expired()) {
std::cout << "weakPtr points to an object.\n";
} else {
std::cout << "weakPtr does not point to an object.\n";
}
return 0;
}
```
在这个例子中,我们创建了一个TestClass的实例,并将其存储在shared_ptr中。然后,我们使用weak_ptr创建一个弱引用,指向相同的对象。
接下来,我们检查weak_ptr是否指向对象,如果是,输出“weakPtr points to an object.”。然后,我们使用reset()方法清除shared_ptr中的对象。最后,我们再次检查weak_ptr是否指向对象,如果不是,输出“weakPtr does not point to an object.”。
输出将是:
```
TestClass constructor called.
weakPtr points to an object.
TestClass destructor called.
weakPtr does not point to an object.
```
因为我们使用了weak_ptr,我们可以避免悬空指针的问题,即使我们清除了shared_ptr中的对象,weak_ptr仍然可以安全地使用。
阅读全文