Имеет ли смысл выделять память под объект Mat в куче?

206
13 ноября 2017, 21:32

Добрый день.
Только начинаю работать с библиотекой opencv, в связи с чем возник вопрос:
Лучше объявлять указатели Mat или же сами объекты?т.е.:

Mat* a = new Mat();

или же

Mat a = Mat(); 

На первый взгляд, кажется что выделение памяти в куче разумней, так как объекты в целом немаленькие, в ходе работы мы можем увеличить размер матрицы и возникнет угроза переполнения стека.
С другой стороны, в тех примерах кода, что я видел, нигде не было использования оператора new, да и я нашел следующее утверждение:

При его использовании (класса Mat) вы освобождаете себя от забот по управлению памятью: выделению и освобождению. Класс реализует счетчик ссылок и память освобождается только тогда, когда она больше не нужна.

Answer 1

Те большие объемы данных, о которых Вы пишете, Mat и так выделяет в куче сам. И реализует логику по управлению этой памятью, включая копирование с подсчетом ссылок. Поэтому о переполнении стека беспокоиться ни к чему. Если вам не нужно именно динамическое создание - смело создавайте на стеке.

READ ALSO
Как отправить / получить структуру в boost :: asio

Как отправить / получить структуру в boost :: asio

Я собирался отправить структуру с клиента на сервер, используя boost :: asio :: async_write_some, в этом случае boost :: serialization приходит на помощь:

290
Чтение текста из файла

Чтение текста из файла

Не могу никак дойти до разумного решения данной проблемы, пытался использовать ifstream, fopen

241
С++ Как получить вывод и возвращаемое значение команды batch

С++ Как получить вывод и возвращаемое значение команды batch

С помощью system можно получить возвращаемое значениеТакже, команду можно открыть как файл

217
Разница между define и const [дубликат]

Разница между define и const [дубликат]

На данный вопрос уже ответили:

271