C++,学习shared_ptr智能指针存在几个大的疑惑,希望有高手能帮忙解答一下
1.智能指针怎么去舒适化一个vector?我试了一下,只能用shared_ptr<vector<int>>=make_shared<vector<int>>(10,1),...
1.智能指针怎么去舒适化一个vector?我试了一下,只能用shared_ptr<vector<int>> = make_shared<vector<int>>(10,1),结果是10个1,但是不知道怎么初始化成1,2,3,4,5,6,7,8,9这样
2.智能指针是不是一定是局部变量?能不能确保一定在离开作用区域的时候删除内存空间?
3.有一个指针指向的内存空间和一个智能指针一样的时候,智能指针自动销毁的时候那个指针还存在吗?
4.我在书上看到一个不用delete去销毁内存空间
列子是connection c = connect(&d);
shared_ptr<connection> p(&c,end_connection);
其中connectiong等是定义的类型,end_connection是一个函数
函数作用是关闭,就和删除空间一样。
为什么智能指针还可以那样子定义?为什么不直接开头定义成智能指针,让他自己去销毁内存? 展开
2.智能指针是不是一定是局部变量?能不能确保一定在离开作用区域的时候删除内存空间?
3.有一个指针指向的内存空间和一个智能指针一样的时候,智能指针自动销毁的时候那个指针还存在吗?
4.我在书上看到一个不用delete去销毁内存空间
列子是connection c = connect(&d);
shared_ptr<connection> p(&c,end_connection);
其中connectiong等是定义的类型,end_connection是一个函数
函数作用是关闭,就和删除空间一样。
为什么智能指针还可以那样子定义?为什么不直接开头定义成智能指针,让他自己去销毁内存? 展开
2个回答
展开全部
typedef vector<int> vector_int;
vector_int *tmp = new vector_int;
给tmp赋值
shared_ptr<vector_int> pointer(tmp);不一定。能保证。
看情况。类似1的情况,则pointer销毁时,tmp指向的对象被销毁。
你给的例子相当于用end_connection替换了delete。因为智能指针不只可以用过来管理内存,也可以管理其它资源。管理其它资源的时候,就应该用相应的操作替换new和delete。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询