以下两种声明有何区别,我应该在什么情况下选择其中一种?
int* ptr;
int *ptr;
void f(unique_ptr<T> x);
void f(unique_ptr<T> &&x);
在我看来,这两种方式都意味着f()接管了指向的对象,但我见过有人同时使用它们。我认为第一种方式应该是标准的,而第二种方式则被认为是一种不好的做法。
int* ptr;
int *ptr;
void f(unique_ptr<T> x);
void f(unique_ptr<T> &&x);
在我看来,这两种方式都意味着f()接管了指向的对象,但我见过有人同时使用它们。我认为第一种方式应该是标准的,而第二种方式则被认为是一种不好的做法。
struct Foo
{
std::string s_;
Foo(std::string s) : s_(std::move(s)) {}
};
Foo
,并且您将复制或移动的决定留给std::string
的构造函数,而不是自己担心。这减少了复杂性(想象一下你有五个这样的参数)。
unique_ptr
一起编译。 - Jonathan Potterf
确实拥有所有权,而在第二种情况下,f
可能会拥有所有权。 - Jarod42