c++ - std::unique_ptr<type> 和 type&& 有什么区别?

标签 c++ c++11

我无法区分两种变体:

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/

相关文章:

c++ - 错误预期为 ';'

c++ - 关于成员函数指针值的 Constexpr - 未定义的行为?

linux - 构建uchar.h文件和ICU版本相关的训练工具时出现Tesseract错误

c++ - 全屏运行 allegro 程序后出现屏幕分辨率问题

c++ - 从基类实例调用派生类方法

c++ - 如何从末尾截断文件? (跨平台)

c++ - 已经在 c++11 或 boost 线程监视器中了吗?

c++ - 不必要的C++代码最终会出现在我完成的程序中吗?

c++ - 这是对 unique_ptr 的误用吗?

c++ - 如何在类定义中初始化 std::array ?