У меня возникла проблема с пониманием части распределения динамической памяти на C++.C++ Dynamic Memory Allocation - char *
Я знаю, что его стандартная практика, чтобы сделать что-то вроде этого, чтобы избежать утечки памяти:
double* pvalue = NULL; // Pointer initialized with null
pvalue = new double; // Request memory for the variable
*pvalue = 29494.99;
delete pvalue;
Однако я видел много исходного кода, как это и delete
никогда не был использован там, чтобы освободить память:
char* text = "something";
Так что вопрос прост: следует ли использовать delete
КАЖДЫЙ раз мне больше не нужен указатель на символ (или ЛЮБОЙ другой)? Или есть некоторые исключения?
Я читал много, и я только больше смущен, поэтому надеюсь, что кто-то может мне помочь.
EDIT:
Спасибо за объяснение. Наконец, я понимаю, и я могу внести изменения в свой исходный код, не беспокоясь!
Вы должны иметь 'delete' для каждого' нового', если вы хотите очистить все. 'char * text =" something ";' не выполняет динамическое распределение памяти. Нет «нового». – John3136
Строковые литералы были сделаны из специального корпуса обратно в C по соображениям удобства afaik. –
Вместо того, чтобы беспокоиться об этом, вам никогда не придется использовать 'delete', за исключением особых случаев. Используйте 'std :: string' и другие контейнеры и интеллектуальные указатели и классы RAII, которые самостоятельно управляют ресурсом. – chris