170 похожих чатов

При выходе из области видимости unique_ptr вызывает деструктор хранимого объекта?

24 ответов

20 просмотров

да

вызывается деструктор самого unique_ptr, который вызовет deleter, да

Ffff-Ffff Автор вопроса
Ilya Zviagin
да

а make_unique только вызывает конструктор объекта?

Ffff Ffff
а make_unique только вызывает конструктор объекта?

Ну не только, он же ещё динамически объект создаёт , выделяет память, а затем создаёт в этой памяти объект, вызывая конструктор

Ffff-Ffff Автор вопроса
Ilya Zviagin
Ну не только, он же ещё динамически объект создаёт...

auto unq = std::make_unique<SomeClass>(/* ctor args */); вот типовой пример использования с обычным классом, а как быть если я хочу использовать unique_ptr с классом-фабрикой других классов?

Ffff Ffff
auto unq = std::make_unique<SomeClass>(/* ctor arg...

Интерфейс у фабрики какой ?

Ffff Ffff
auto unq = std::make_unique<SomeClass>(/* ctor arg...

для начала, можно не использовать std::make_unique

Ffff-Ffff Автор вопроса
Ffff Ffff
пока не сделал)

Так делай тогда фабрику так, чтобы она уже возвращала unique_ptr или shared_ptr

Ilya Zviagin
Интерфейс у фабрики какой ?

а если бы фабрика давал объект по значению?

Ffff-Ffff Автор вопроса
Ilya Zviagin
Так делай тогда фабрику так, чтобы она уже возвращ...

а разницу возвращаемых объектов делать с помощью перегрузок?

Ffff-Ffff Автор вопроса
Ilya Zviagin
Так делай тогда фабрику так, чтобы она уже возвращ...

class PreprocessingFactory { public: PreprocessingFactory(); std::unique_ptr<SomeClass1> buildPreprocessing(int ); std::unique_ptr<SomeClass2> buildPreprocessing(cv::Mat); private: };

Ffff-Ffff Автор вопроса
Ilya Zviagin
Не понял.

имел ввиду сам метод создания объектов перегрузить несколько раз, сделал пример в коде

Ffff Ffff
class PreprocessingFactory { public: Preprocessing...

Пример странный, почему одинаковые методы ? buildPreprocessing - две штуки , почему ? Обычно методы называются по имени производимого продукта. buildProduct1, buildProduct2, buildHouse, buildCar и так далее. Тут я мысль не понял.

Ffff-Ffff Автор вопроса
Ilya Zviagin
Пример странный, почему одинаковые методы ? buildP...

методы одинаковые потому что в зависимости от железа будет использоваться один либо другой класс препроцессинга, при препроцессинге на cpu будет использоваться opencv а при препроцессинге на gpu будет использоваться npp, и я решил что бы не иметь зоопарк разных классов в разных местах лучше попробовать сделать фабрику с одним интерфейсом

Ffff Ffff
методы одинаковые потому что в зависимости от желе...

Так это должен быть один метод, а не два.

Ffff-Ffff Автор вопроса
Ilya Zviagin
Так это должен быть один метод, а не два.

перегрузки использовать плохо?

Ffff Ffff
перегрузки использовать плохо?

Нет, просто ты же фабрику пишешь, тут это против её логики

Ffff-Ffff Автор вопроса
Ilya Zviagin
Нет, просто ты же фабрику пишешь, тут это против е...

например я буду вызывать метод билдера объекта с разными аргументами в зависимости от железа, и он будет возвращать unique_ptr на разные объекты

Ffff-Ffff Автор вопроса
Ilya Zviagin
Нет, просто ты же фабрику пишешь, тут это против е...

каждый метод фабрики должен по задумке возвращать только объект одного класса?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта