c++ - shared_ptr 与指针共存

标签 c++ pointers smart-pointers

我有一个函数如下

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

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

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

关于c++ - shared_ptr 与指针共存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471388/

相关文章:

c++ - 如何解析包装器代码中的 "Invalid use of incomplete type"?

C++处理文件文件末尾的空行

c++ - 使用MSVC 2017编译器在Qt Creator中进行调试

c++ - 如何在不添加对库的依赖的情况下添加与库结构的兼容性?

c - 通过引用传递 C 指针?

包含不同值类型的 void 指针的 C 数组

c - C 语言中的简单密码提示

c++ - 为什么赋值运算符调用构造函数?

c++ - 创建共享指针的首选方式

c++11 - 命名 API 是否意味着内存所有权的转移?