У меня есть класс, который имеет член private
, который объявлен в куче в конструкторе. Затем, в деструкторе, это delete
ред. Теперь я хотел бы добавить метод для изменения этой переменной. Я хотел бы иметь возможность использовать ссылку, но я не уверен в специфике используемой памяти, и я хотел бы знать, что я делаю это правильно (проект может быть довольно большим в отделе памяти).Параметры: Где они объявлены?
class A
{
private: std::string str;
/* ... */
public:
A()
{
str = new std::string("");
}
~A(){delete str;}
// method to modify str.
};
Если я пройду по ссылке, какие шаги следует предпринять для устранения утечек памяти и минимизации использования памяти? При этом я не хочу, чтобы все это было оптимистично с оптимизацией.
Как я должен писать свои получатели и сеттеры для члена, находящегося в куче? Копировать конструкторы, что-то еще?
Обратите внимание, что класс std :: string уже выполняет собственное управление памятью, которое включает инкапсуляцию конструктора копирования, перемещения конструктора и оператора присваивания. Вам не нужно, когда агрегировать класс, который уже имеет это, сделать это снова. –
Следовательно, если в вашем случае класс, который агрегирован (частный член), имеет собственное управление памятью (как это делает std :: string), скорее не выделяйте его в кучу.Если вы обеспокоены тем, что у вас есть много зависимостей в вашем файле заголовка, что может быть причиной использования кучи, вместо этого используйте псевдоним pimpl_. –
Не используйте указатели и распределение кучи, пока вы в ней не нуждаетесь. – Raja