2015-07-08 3 views
0

У меня возникла проблема с пониманием части распределения динамической памяти на 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:

Спасибо за объяснение. Наконец, я понимаю, и я могу внести изменения в свой исходный код, не беспокоясь!

+4

Вы должны иметь 'delete' для каждого' нового', если вы хотите очистить все. 'char * text =" something ";' не выполняет динамическое распределение памяти. Нет «нового». – John3136

+1

Строковые литералы были сделаны из специального корпуса обратно в C по соображениям удобства afaik. –

+1

Вместо того, чтобы беспокоиться об этом, вам никогда не придется использовать 'delete', за исключением особых случаев. Используйте 'std :: string' и другие контейнеры и интеллектуальные указатели и классы RAII, которые самостоятельно управляют ресурсом. – chris

ответ

3

Вы должны delete все, что вы создаете с new, и ничего больше.

char* text = "something"; 

Это не создает что-то с new, так что вы не должны delete это.

Фактически, этот оператор не создает ничего (кроме указателя) - он устанавливает text, чтобы указать на строку, созданную при запуске вашей программы.