c++ - `make_unique` 相对于普通构造函数的优势?

标签 c++

我想知道使用智能指针(如下面代码中的 Box3 )声明 Box 是否比(对我来说更经典)声明有任何优势调用构造函数(如下面代码中的 Box2)或者这两种构造之间的差异本质上是主观偏好的问题。

#include <iostream>
#include <memory>

class Box{
    private:
        double length;
        double width;
        double height;
    public:
        Box(double lengthValue, double widthValue, double heightValue); 
        double volume() const;      
};
Box::Box(double lValue, double wValue, double hValue):
    length {lValue}, width {wValue}, height {hValue} {
}
double Box::volume() const {
    return length * width * height;
}
int main() {    
    Box Box2 {1.5,2.5,3.5};
    std::cout << Box2.volume() << std::endl;    
    auto Box3 = std::make_unique<Box>(1.5,2.5,3.5);
    std::cout << Box3->volume() << std::endl;   
    return 0;
}

最佳答案

相对于 C++ 中的其他基本操作,动态分配是一项开销很大的操作,因此您应该避免在不需要的地方使用它。

也就是说,一个很大的区别是动态分配很慢。

另一个区别是您可以用它做什么。通过移动所有权,可以使动态分配的实例在创建它的 block 之后持久存在。相反,当执行离开 block 时,直接声明的变量将不复存在。

关于c++ - `make_unique` 相对于普通构造函数的优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36504950/

相关文章:

c++ - "Non-pointer POD"C++ 类型

c++ - GCC 4.7/Clang 3.2 中的宏替换失败

javascript - MongoDB 事件.js :85

c++ - 特征矩阵作为函数的默认参数

C++ 库链接问题

java - 封装——当 setter 已经公开时,为什么我们需要它?

python - 如何在 C++ 中创建可迭代的对象列表?

c++ - std::function 类型和模板实例化

c++ - 如何正确处理音频中断?

C++读取txt文件时遇到问题