gpt4 book ai didi

c++ - 可以使用对 shared_ptr 拥有的对象的引用吗?

转载 作者:太空狗 更新时间:2023-10-29 23:48:41 24 4
gpt4 key购买 nike

我发现它运行良好,但不知道这是否安全,因为我不明白它为什么会起作用:

struct X{
static X& make(){
return *std::make_shared<X>();
}
...
}

int main(){
const auto& a = X::make();
a.function();
...
// seems like the instance holds and nothing broken
}

根据我的理解,从 shared_ptr operator* 中返回的对取消引用对象的引用不应影响 shared_ptr 管理实例引用计数的方式: 因此 make() 中创建的实例应该在 make() 完成后销毁。但是这种代码模式多次运行良好,我不明白为什么。所以我不确定我们是否真的可以用这种方式做到这一点...感谢任何评论!

最佳答案

不,从make_shared 返回的共享指针在返回后立即被销毁,因此通过取消引用它获得的引用将是悬空的。它可能看起来有效,但它实际上只是未定义的行为,正如评论中所说,undefined 是未定义的。

关于c++ - 可以使用对 shared_ptr 拥有的对象的引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55327384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com