#c
Вопрос:
Я пытаюсь реализовать класс unique_ptr в C , но как узнать, был ли указатель, который мы ему передали, выделен с new
использованием или new[]
без использования default_delete
(мой школьный стандарт не разрешает c 11). Я имею в виду, когда вы передаете указатель на конструктор, например, так:
unique_ptrlt;intgt; ptr(new int[10]);
как вы узнаете внутри класса, нужно ли вам звонить delete[]
или delete
?
Комментарии:
1. Попробуйте вместо этого использовать интеллектуальный unique_ptr для массива:
unique_ptrlt;int[]gt; ptr(new int[10]);
2. Я пытался, но он не компилировался
Ответ №1:
Ты не можешь сказать. И никто не может std::unique_ptr
.
Подумайте об этом. Если бы это можно было определить автоматически, вам не понадобились бы два вида delete
.
std::unique_ptrlt;intgt; ptr(new int[10]);
это неправильно, так как он будет звонить delete
, а не delete[]
.
Используйте std::unique_ptrlt;int[]gt; ptr(new int[10]);
вместо этого, что вызовет delete[]
, а не delete
.
Комментарии:
1. Хорошо, так есть ли smart_ptrs для массивов?
2.
unique_ptrlt;type[]gt;
смотрите также поиск в Google «unique_ptr для массива»