Мне интересно, есть ли какие-либо преимущества в объявлении Box
с помощью умного указателя (как Box3
в коде ниже) над (для меня более классическим) объявлением, вызвав конструктор (как Box2
в коде ниже), или если разница между этими двумя конструкциями, по существу, является предметом субъективных предпочтений.Преимущество `make_unique` над простым конструктором?
#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;
}
Это не значит, что использование указателя имеет «преимущества» по сравнению с использованием указателя.Иногда указатель * требуется *. Иногда динамическое распределение памяти * требуется *. Если они вам не нужны, не используйте их «только потому, что». –