加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – shared_ptr与指针共存

发布时间:2020-12-16 06:49:17 所属栏目:百科 来源:网络整理
导读:我有如下功能 void a(shared_ptrX val) {...} 有时,我想传入一个堆分配的对象 shared_ptrX v(new X());a(v); 其他时候,我想传入一个堆栈分配的对象 class C{ //doesn't work properly b/c when the shared_ptr dies it will try to delete x... C() { a(shar
我有如下功能

void a(shared_ptr<X> val) {...}

有时,我想传入一个堆分配的对象

shared_ptr<X> v(new X());
a(v);

其他时候,我想传入一个堆栈分配的对象

class C
{
    //doesn't work properly b/c when the shared_ptr dies it will try to delete x...
    C() { a(shared_ptr<X>(&x)); } 
    X x;
};

使函数接受智能指针的最佳方法是什么,还要让智能指针引用堆栈分配的对象?

或者我应该去Java路由并从堆中分配所有内容?

解决方法

我只是让函数采用这样的模板参数:

template<class P>
void func(P ptr) {
     // use ptr like a pointer as usual
     // for example
     *ptr = 10;
}

然后你可以这样做:

shared_ptr<int> v(new int);
int x;

func(v);  // works
func(&x); // also works

您可以传递任何具有类似接口的指针,例如,迭代器:

std::vector<int>::iterator it = v.begin();
func(it); // still works :-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读