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

Max*_*Max 5 c++ pointers smart-pointers

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

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

答案可能是相同的.

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

void use_pointer(T ptr)
{
    ptr->act();
}
Run Code Online (Sandbox Code Playgroud)

应该是

  • 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)

别的什么?谢谢!

Luc*_*ton 10

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

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

  • 方便的是,如果接受引用,则所有指针类型的调用语法都是相同的:`use_pointer(*ptr)` (2认同)

Ben*_*igt 5

让来电者决定:

template<typename T>
void use_pointer(const T& ptr)
{
    ptr->act();
}
Run Code Online (Sandbox Code Playgroud)

与原始指针很好地工作(如果调用者有,例如,用自动或静态寿命的阵列), ,shared_ptr,unique_ptr和也各种迭代器类型的,如果呼叫者被一个元件传递从一个集合.