Есть ли обходной путь для ограничения арифметики указателей c со смарт-указателями в C ++? - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю над проектом и не могу использовать скобочные обозначения, но должен использовать умные указатели для массивов. Однако, как я обнаружил, арифметика указателей c недопустима с умными указателями. Есть ли обходной путь для этого?

Редактировать: проект предназначен для курса, и в спецификациях проекта говорится, что нельзя использовать обозначения в скобках, и должны использоваться динамически распределенные массивы в форме интеллектуальных указателей.

1 Ответ

2 голосов
/ 24 февраля 2020

Специализация unique_ptr была придумана специально для выполнения арифметики указателей c. Используйте «массив с неизвестным размером» в качестве выделенного типа.

Пример:

std::unique_ptr<int[]> p(new int[5]);
p[1] = 8;
std::cout << p[1];

Чтобы преодолеть искусственное и бессмысленное ограничение «скобка не может использоваться», измените p[1] на *(p.get()+1). Но сначала убедитесь, что вы правильно поняли ограничение - по моему мнению, никто в здравом уме не может потребовать такого осуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...