如果我声明了一个被 shared pointer 包装的对象:
std::shared_ptr<myClass> myClassObject(new myClass());
然后我想把它作为一个参数传递给一个方法:
DoSomething(myClassObject);
//the called method
void DoSomething(std::shared_ptr<myClass> arg1)
{
arg1->someField = 4;
}
以上代码是简单地增加了shared_ptr的引用计数,一切都很好吗?还是它留下了悬空指针?
你还应该这样做吗?
DoSomething(myClassObject.Get());
void DoSomething(std::shared_ptr<myClass>* arg1)
{
(*arg1)->someField = 4;
}
我认为第二种方法可能更有效,因为它只需要复制1个地址(而不是整个智能指针),但第一种方法似乎更易读,并且我不预计会推动性能极限。我只想确保这样做没有什么危险。
谢谢。
const std::shared_ptr<myClass>& arg1
可以翻译为“参数 arg1 是一个指向 myClass 对象的 shared_ptr,同时是一个常量引用”。 - Captain Obvliousvoid DoSomething(myClass& arg1)
更好的功能。 - ildjarnshared_ptr<>
,您必须按值传递才能实际共享所有权。 - ildjarnstd::make_shared
不仅更高效,而且比std::shared_ptr
构造函数更安全。 - R. Martinho Fernandes