std :: shared_ptr的错误用法,有人可以帮忙指出问题所在吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std :: shared_ptr的错误用法,有人可以帮忙指出问题所在吗?相关的知识,希望对你有一定的参考价值。
我清楚地知道下面的前一个代码是错误的,因为它两次释放资源。但是我的问题是,后一个(检查https://godbolt.org/z/ndsHtX)是否正确。也许是正确的,因为终止输出。我应该意识到的任何潜在问题?我很高兴在这个问题上有所帮助。
错误代码:
#include<memory>
#include<iostream>
using std::shared_ptr;
struct S
shared_ptr<S> dangerous()
return shared_ptr<S>(this); // don't do this!
~S()
std::cout << "destructor" << std::endl;
;
int main()
shared_ptr<S> sp1(new S);
shared_ptr<S> sp2 = sp1->dangerous();
return 0;
我不确定是对还是错:
#include<memory>
#include<iostream>
using std::shared_ptr;
class S
public:
//S() = delete;
int m_num;
public:
static shared_ptr<S> dangerous()
return make_shared<S>(); // don't do this!
void setNum(int num)
m_num = num;
~S()
std::cout << "destructor" << std::endl;
;
int main()
shared_ptr<S> sp1 = S::dangerous();
shared_ptr<S> sp2 = sp1;
std::cout << sp1.use_count() << std::endl;
std::cout << sp2.use_count() << std::endl;
sp1.get()->setNum(99);
sp1.get()->m_num;
std::cout << "hello" << std::endl;
return 0;
答案
您的第二个程序很好(尽管没有意义,因为return shared_ptr<S>()
返回一个空指针,除非将其取消引用,否则它不会是危险的。)>
以上是关于std :: shared_ptr的错误用法,有人可以帮忙指出问题所在吗?的主要内容,如果未能解决你的问题,请参考以下文章
这是 std::vector 和 std::shared_ptr 内存泄漏的错误吗?
std::initializer_list 中的 std::shared_ptr 似乎过早地被破坏