我无法区分两种变体:
class test {
std::unique_ptr<std::vector<float>> m_field;
test(const std::vector<float>&& values) : m_field{std::make_unique<vector<float>>(std::move(values))} {}
};
和
class test {
const std::vector<float>&& m_field;
test(const std::vector<float>&& values) : m_field{std::move(values)} {}
};
在第一个变体中,默认析构函数将自动删除 unique_ptr
和内部 vector
但在第二个变体中会发生什么?默认析构函数将如何工作?
哪种变体更好?
P.S. 也许这很容易,但我正在寻找但找不到。我的英语不好,请不要送我去硬文档。
最佳答案
第一个test
类在我们去掉constructor中的const
时很有用,应该是
class test {
public:
std::unique_ptr<std::vector<float>> m_field;
test(std::vector<float>&& values) : m_field{std::make_unique<vector<float>>(std::move(values))} {}
};
因为移动操作可以在非常量对象上完成。 例如
vector<float> v(20, 3.0);
test t(move(v));
cout << v.size() << endl; // print 20 if `const` will be in constructor definition
// print 0 if `const` specifier is missed in constructor, object was moved
二考类废话。这个类的析构函数什么都不做。在构造函数中m_field
成员被初始化并指向传递的 vector ,仅此而已,在这个类的ctor/dtor中没有做任何事情。
关于c++ - std::unique_ptr<type> 和 type&& 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47714256/