да
вызывается деструктор самого unique_ptr, который вызовет deleter, да
а make_unique только вызывает конструктор объекта?
Ну не только, он же ещё динамически объект создаёт , выделяет память, а затем создаёт в этой памяти объект, вызывая конструктор
auto unq = std::make_unique<SomeClass>(/* ctor args */); вот типовой пример использования с обычным классом, а как быть если я хочу использовать unique_ptr с классом-фабрикой других классов?
Интерфейс у фабрики какой ?
для начала, можно не использовать std::make_unique
пока не сделал)
Так делай тогда фабрику так, чтобы она уже возвращала unique_ptr или shared_ptr
а если бы фабрика давал объект по значению?
а разницу возвращаемых объектов делать с помощью перегрузок?
class PreprocessingFactory { public: PreprocessingFactory(); std::unique_ptr<SomeClass1> buildPreprocessing(int ); std::unique_ptr<SomeClass2> buildPreprocessing(cv::Mat); private: };
имел ввиду сам метод создания объектов перегрузить несколько раз, сделал пример в коде
Пример странный, почему одинаковые методы ? buildPreprocessing - две штуки , почему ? Обычно методы называются по имени производимого продукта. buildProduct1, buildProduct2, buildHouse, buildCar и так далее. Тут я мысль не понял.
методы одинаковые потому что в зависимости от железа будет использоваться один либо другой класс препроцессинга, при препроцессинге на cpu будет использоваться opencv а при препроцессинге на gpu будет использоваться npp, и я решил что бы не иметь зоопарк разных классов в разных местах лучше попробовать сделать фабрику с одним интерфейсом
Так это должен быть один метод, а не два.
перегрузки использовать плохо?
Нет, просто ты же фабрику пишешь, тут это против её логики
например я буду вызывать метод билдера объекта с разными аргументами в зависимости от железа, и он будет возвращать unique_ptr на разные объекты
каждый метод фабрики должен по задумке возвращать только объект одного класса?
Ну да. БАЗОВОГО класса.
Обсуждают сегодня