我有一个函数如下
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/