Можно ли перегрузить новый оператор для выделения чего-то вроде 2d-массива в C ++? - PullRequest
0 голосов
/ 07 мая 2020

Можно ли перегрузить глобальные операторы нового и глобального удаления в C ++ для выделения и освобождения 2-го блока памяти с заданными «высотой» и «шириной»?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

К сожалению, глобальный оператор new принимает один параметр, поэтому вы не можете указать ему одновременно «высоту» и «ширину». И глобальный оператор new / delete будет использоваться не только в написанном вами коде, но и в используемой вами библиотеке, например std :: string, std :: vector. Таким образом, такое изменение может вызвать серьезные проблемы.

0 голосов
/ 07 мая 2020

Можно ли перегрузить новый оператор для выделения чего-то вроде 2d-массива в C ++?

Да.

но можно ли получить пример кода?

Пример:

std::unique_ptr<int[][10]> arr {new int[n][10]};

с заданными «высотой» и «шириной»?

Только если внутренние размеры указаны во время компиляции постоянный. Только внешнее измерение может быть динамическим c.

Легко переходить между динамическим c одномерным плоским массивом и многомерным.

...