С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
DJames-
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 12
#1

Деструкторы - C++

24.09.2012, 21:20. Просмотров 454. Ответов 3
Метки нет (Все метки)

Всем доброго времени суток! Возникли некоторые непонятки с деструкторами, а точнее их время вызова и механизм работы.

Вот код:

#include <iostream.h>
#include <conio.h>

class String
{
public:
String();
String(char*);
~String();

friend ostream &operator<<(ostream &,String );
friend istream &operator>>(istream &,String &);
private:
char* ln;
int sizeln;
};

String::String()
{
ln = new char [256];
sizeln = 256;
cout << "Empty Constructor called!" << endl;
}
String::String(char *sPtr)
{
sizeln = strlen(sPtr);
ln = new char [sizeln];
ln = sPtr;
cout << "Constructor with parameters called!" << endl;
}
String::~String()
{
delete [] ln;
cout << "Destructor called!" << endl;
}
ostream &operator<<(ostream &out,String s1)
{
out << s1.ln << endl;

return out;
}
istream &operator>>(istream &in,String &s)
{
in.getline(s.ln,256);
s.sizeln = strlen(s.ln);

return in;
}

main()
{
String s1 = "Operators"; //Constructor with parameters called
String s2 = "on cpp"; //Constructor with parameters called
String s3,s4; //Empty Constructor called

cout << s1 << s2; //two destructors called

cin >> s3 >> s4;

cout << s3 << s4; //two destructors called

getch();

return 0;
}
//all destructors called

Непонятно почему при команде cout вызывается деструктор, хотя строка не обнуляеться.
И вообще хотелось бы услышать общую оценку о программе. Мне кажется что я неправильно использую операторы new и delete и деструкторы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2012, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Деструкторы (C++):

Деструкторы - C++
Не совсем понятно, по какой все таки причине разработчики C++ отказались от возможности иметь деструкторы с аргументами, то есть передавать...

Деструкторы - C++
Вообщем сразу к сути. В нижеприведенном примере вызывается 2 деструктора. Я никак не пойму, почему именно два? вот сам метод: ...

Конструкторы и деструкторы - C++
Привет. Есть структура, содержащая 7 полей, в которые я ввожу значения с клавиатуры. Нужно используя конструкторы и деструкторы...

Конструкторы и деструкторы - C++
Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны присутствовать: Для инициализации...

Конструкторы и деструкторы - C++
Помогите, пожалуйста, исправить программу и закончить ее как надо. Необходимо реализовать класс с двумя полями, имеющими имена first и...

Конструкторы и деструкторы - C++
Помогите исправить программу. Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны...

3
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:34 #2
объект вышел из области видимости = вызван деструктор
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
24.09.2012, 21:38 #3
C++
1
2
3
4
5
6
ostream &operator<<(ostream &out,String s1)
{
out << s1.ln << endl;
 
return out;
}
При вызове будет создана копия объекта (ибо передача по значению, будет вызван конструктор копирования, который у вас кстати не определен, компилятор использует неявно сгенерированный, который просто копирует данные, следовательно ваш код некорректен, потому как два объекта будут содержать один адрес), соответственно при выходе из функции вызывается деструктор для данного объекта.
0
DJames-
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 12
25.09.2012, 19:48  [ТС] #4
Ах да! Спасибо, со всем разобрался.
0
25.09.2012, 19:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2012, 19:48
Привет! Вот еще темы с ответами:

Конструкторы и деструкторы - C++
Не понимаю, как закончить программу. Написала конструктор и деструктор, хотя он тут и не нужен по идее. Но по заданию сделала. А как...

Где деструкторы? - C++
Ребят сижу разбираю код на С++,не могу понять где диструктор тут.. #include &lt;vcl.h&gt; #pragma hdrstop #include &quot;Unit1.h&quot; ...

Деструкторы и исключения - C++
В одном учебнике встретилась такая фраза: Если деструктор, вызванный в процессе разматывания стека, выбрасывает исключение, вызывается ...

Конструкторы и деструкторы - C++
#include &lt;iostream&gt; #include &lt;Windows.h&gt; class Try { public: void* px; Try() { printf(&quot;Try\n&quot;); px=malloc(12); }; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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