繁体   English   中英

我应该将什么类型的指针传递给C ++ 11中的方法?

[英]What type of pointer should I pass to a method in C++11?

我之后有两种不同的情景:

  1. 你有一个shared_ptr
  2. 你有一个unique_ptr

答案可能是相同的。

考虑一种方法,它使用指针但不承担所有权:

void use_pointer(T ptr)
{
    ptr->act();
}

应该是

  • my_type * (原始指针)
  • const shared_ptr<my_type> & (发送const ref,如果使用shared_ptr)
  • const unique_ptr<my_type> & (发送const ref,如果使用unique_ptr)
  • weak_ptr<my_type> (为方法调用构造weak_ptr)

别的什么? 谢谢!

如果您不承担所有权,那么最好接受对指针的引用。 如果你想表达可选性,你可以使用原始指针,或者你可以使用例如boost::optional<U&> (其中U是指针类型)。

不承担所有权的函数几乎不会接受智能指针。 对于智能指针接口中的被调用者而言,除了到达指针对象之外,通常没有任何用处。 所以通过它。

让来电者决定:

template<typename T>
void use_pointer(const T& ptr)
{
    ptr->act();
}

与原始指针(如果调用者具有自动或静态生命周期的数组), shared_ptrunique_ptr以及调用者从集合中传递一个元素的各种迭代器类型很好地协同工作。

在这种情况下,它可能应该是my_type& 如果你真的必须传递指针,那么只需传递一个原始指针:因为你在代码中使用智能指针,当有人看到原始指针时,他们不应该想“哦不,它可以泄漏!” 而是“aha,一个非拥有指针”(也就是说,假设他们熟悉惯用的C ++)。

在不知道为什么你有一个智能指针(而不是原始指针),并且不知道被调用函数的语义,特别是为什么它需要一个指针(而不是通过值或通过const调用)时,不可能回答这个问题。参考)。 但是,作为一个很好的起点:如果函数采用类类型,则使用const引用,否则使用value。 (但是有没有一种情况,你会指向一个不是类类型的东西?)

如果函数要存储指针(例如添加到容器中),请使用std :: shared_ptr,otherwize使用std :: unique_ptr。 如果你的指针已经是std :: shared_ptr,那么继续使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM