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 :-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |