weak_ptr如何转换为shared_ptr。
时间: 2023-08-23 20:09:39 浏览: 164
要将weak_ptr转换为shared_ptr,可以使用weak_ptr的lock()函数。lock()函数返回一个shared_ptr,它可以与原始的weak_ptr共享资源,并且在需要时增加资源的引用计数。
下面是一个示例代码:
```cpp
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> sharedPtr;
std::weak_ptr<int> weakPtr;
{
sharedPtr = std::make_shared<int>(42);
weakPtr = sharedPtr;
std::cout << "sharedPtr use_count: " << sharedPtr.use_count() << std::endl;
if (auto lockedPtr = weakPtr.lock()) {
std::cout << "weakPtr converted to sharedPtr. Value: " << *lockedPtr << std::endl;
std::cout << "sharedPtr use_count: " << sharedPtr.use_count() << std::endl;
} else {
std::cout << "weakPtr is expired." << std::endl;
}
}
std::cout << "sharedPtr use_count: " << sharedPtr.use_count() << std::endl;
return 0;
}
```
输出结果为:
```
sharedPtr use_count: 1
weakPtr converted to sharedPtr. Value: 42
sharedPtr use_count: 2
sharedPtr use_count: 1
```
在上面的例子中,我们创建了一个shared_ptr和一个与之相关联的weak_ptr。通过调用weak_ptr的lock()函数,我们可以将其转换为shared_ptr。在转换过程中,引用计数会增加,我们可以通过shared_ptr的use_count()函数来查看引用计数。
阅读全文