LINUX.ORG.RU

перезагрузка операции присваивания (C++)


0

0

Если у меня определен класс у которого поля - указатели на какие-либо структуры, и я удаляю класс не перезагруженным delete, то участки памяти, на которые указывают поля остануться? Я пишу операция присваивания и не знаю, то ли создавать навые элементы (если динамическая память тоже удалится), толи просто присвоить указатели...
Интуиция подсказывает мне что динамич. не удалится.

Извините за глупый вопрос.

anonymous

я не уверен что понял вопрос правильно.

если вы спрашиваете о том, будет ли operator delete
рекурсивно вызывать delete для this->some_pointer, то
нет.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, вы меня почти правильно поняли.

У мен вот какая проблема:

temp[i] = this->conf->item[i];
temp[this->conf->all] = this->edit_w->newItem;

И temp и item - Указатель на класс Item (Item *temp, *item). При компиляции вот что вылазает:

In file included from .ui/configure_f.cpp:27:
configure_f.ui.h: In member function `virtual void configure_f::add_bClick()':
configure_f.ui.h:29: error: no match for 'operator=' in '*(temp +
   (+(this->configure_f::conf->Config::all * 32))) =
   this->configure_f::edit_w->edit_f::newItem'
class.cpp:6: error: candidates are: Item& Item::operator=(const Item&)
make: *** [.obj/configure_f.o] Ошибка 1

Что за кандидат? Я перезагрузил операцию присваивания так:

	const Item& operator = (const Item &item){
	    if (&item == this) return *this;
	    strcpy(device, item.device);
	    strcpy(point, item.point);
	    strcpy(caption, item.caption);
	    strcpy(fstype, item.fstype);
	    strcpy(image, item.image);
	    flag = item.flag;
	}
Но это не имеет значения так как закомментировав ее я получаю ту же ошибку.

anonymous
()
Ответ на: комментарий от anonymous

> temp[this->conf->all] = this->edit_w->newItem;

опять не очень поимаю, но, может быть, вы имели в виду

temp[this->conf->all] = *this->edit_w->newItem
                        ^

? или нет? 'newItem' это что?

idle ★★★★★
()
Ответ на: комментарий от cvv

Возможно тебе нужен конструктор копии вместо операции присваивания

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.