使用唯一指针作为函数参数
唯一指针在 C 11 中提供内存管理功能。当传递 unique_ptr 作为函数参数时,有有几种需要考虑的方法,每种方法都有不同的含义。
按值传递(所有权转移)
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
调用此构造函数需要按值传递指针,有效地将其所有权转移给函数:
Base newBase(std::move(nextBase));
此操作后,nextBase 将是空,因为 unique_ptr 的所有权已转移。
通过非常量 L 值传递参考(所有权歧义)
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
这种方法需要一个实际的 L 值(命名变量)作为参数:
Base newBase(nextBase);
在这种情况下,不确定是否该函数将声明或不声明该指针的所有权。 Base::Base(std::unique_ptr
通过 Const L 值引用传递(无所有权转移)
Base(std::unique_ptr<Base> const &n);
传递 const L 值引用可防止函数声明指针的所有权。该函数可以访问指向的对象,但不能修改其值。
通过 R 值引用传递(潜在所有权转移)
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
这种方法类似于通过非常量 L 值引用传递。它允许传递临时对象:
Base newBase(std::unique_ptr<Base>(new Base)); // Legal
但是,在传递非临时参数时需要使用 std::move 。该函数可能会或可能不会声明指针的所有权,这再次使其行为在不检查实现的情况下不太明显。
建议
操纵唯一值指针
操作唯一指针:
以上是我应该如何在 C 中将唯一指针作为函数参数传递?的详细内容。更多信息请关注PHP中文网其他相关文章!