首页 > 解决方案 > 可以调用 myfunc(make_shared(0)) 到接收weak_prt 的函数?

问题描述

我有一个需要 weak_ptr<> 的函数,我在函数中传递了我的 shared_ptr<> 。

#include <memory>
#include <iostream>

void takeweak(std::weak_ptr<int> wp) {
    std::cout << wp.use_count() << std::endl;  // prints 1
}

int main() {
    takeweak(std::make_shared<int>());
    return 0;
}

这是运气还是设计?

我是否有一个共享指针的副本存在于整个main()作用域函数中?或者共享指针是否会存在于 body 的整个范围内takeweak()(直到它的堆栈展开)?

这种行为是否可能会在新版本的编译器或语言标准中中断?

相关问题:在线程函数和普通函数中将 shared_ptr 传递给 weak_ptr 时的不同行为

标签: c++scopeshared-ptrsmart-pointersweak-references

解决方案


推荐阅读