Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Tolstopyz
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 2
#1

Оператор delete в деструкторе - C++

13.01.2014, 22:45. Просмотров 492. Ответов 3
Метки нет (Все метки)

Здравствуйте, нужна помощь, есть класс и функция к которую передается этот класс:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
 
class a
{
public:
    a(){f = new char (100);}
    ~a(){delete f;}
    char *f;
};
 
void how (a g)
{cout<<g.f;}
 
int main ()
{
a b;
how(b);
return 0;
}
Этот код скомпилируется и почти выполниться, но будет ошибка так как деструктор вызовется два раза, сначала для копии класса потом для самого класса и получится, что он захочет второй раз освободить память. Что нужно изменить в именно в Классе что бы такой код выполнился?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2014, 22:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оператор delete в деструкторе (C++):

После закрытия консоли выплывает необработанное исключение, delete в деструкторе - C++
class X{ float *xo,*yo,*zo,*fo; public: X(); ~X(){}; friend void run(X x); friend void print(X x); };

С++, delete в деструкторе класса не видит переменные, создаваемые new в конструкторе класса - C++
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;math.h&quot; using namespace std; class fun { double t = 0, x = 0, y = 0, z =...

оператор delete[] - C++
Применение delete (без ) к указателю на массив освобождает только нулевой элемент, а оставшиеся создают утечку памяти, но как объяснить...

Оператор delete[] - C++
Код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #define stop __asm nop int main() { int N,M; ...

Оператор delete - C++
Написал небольшую программу и в просмотрел каждую строчку в отладчике. И получается что сразу же после оператора delete p_val; значение в...

Оператор delete - C++
Вчера заметил, но ответа в сети так и не нашел: int *i = new int(5); cout &lt;&lt; *i &lt;&lt; endl; delete i; int p = *i; cout &lt;&lt; p &lt;&lt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
13.01.2014, 22:47 #2
Цитата Сообщение от Tolstopyz Посмотреть сообщение
Что нужно изменить в именно в Классе что бы такой код выполнился?
Корректный конструктор копирования и оператор присваивания
Tolstopyz
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 2
13.01.2014, 22:54  [ТС] #3
Спасибо
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.01.2014, 22:55 #4
Правило трёх
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2014, 22:55
Привет! Вот еще темы с ответами:

оператор delete - C++
#include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;iomanip&gt; using namespace std; int main() { setlocale (LC_ALL,&quot;russian&quot;); ...

Оператор delete[] - C++
Салют! тут вот в чем вопрос... Если с помощью new выделена память под несколько, скажем, массивов, то с помощью оператор delete удалять...

Можно ли обобщить оператор delete ? - C++
Здравствуйте! Есть некоторый класс в котором есть указатель которому присваивается некоторое значение &quot;из-вне&quot; так сказать, так вот его...

Нужно ли тут вызывать оператор delete - C++
Всем здрасьте. Тут встал вопрос об операторе delete. struct x { //... }; x* y; y = new x; //...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.01.2014, 22:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru