Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вызов деструктора при delete object; не вызовет ли ошибки 
V
    Опции темы
Rockie
Дата 10.12.2006, 03:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



К примеру:

Код
#include "stdafx.h"

class SomeClass{
private:
    int* x;
public:
    SomeClass(){x = new int(10); }
    ~SomeClass(){delete x; }

};


int _tmain(int argc, _TCHAR* argv[])
{
    SomeClass* pSomeClass = new SomeClass;

    delete pSomeClass;

    return 0;
}

Такой такой код корректен? Сколько раз в данном случае отрабатывает delete?





--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
witex
Дата 10.12.2006, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 16.10.2006
Где: Эстония

Репутация: 0
Всего: 4



1 раз будет всего смполняться!
Только этот
Код

delete pSomeClass;

чтобы удалить "х", надо вызывать деструктор! ->~SomeClass();
но чтобы праильно "х" удалалить , надо испольщовать delete[] а не delete

--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
Partizan
Дата 10.12.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



всё правильно.... delete pSomeClass вызовет деструктор класса pSomeClass в котором в свою очередь вызовется delete x

Это сообщение отредактировал(а) Partizan - 10.12.2006, 11:49


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
VectorMan
Дата 10.12.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: 1
Всего: 4



witex, уверен?

Вообще то конструкции типа
Код

x = new int(10);

означают "динамически создать элемент типа int и присвоить ему значение 10"
PM   Вверх
archimed7592
Дата 10.12.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



deleted

Это сообщение отредактировал(а) archimed7592 - 10.12.2006, 12:36


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Daevaorn
Дата 10.12.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(archimed7592 @  10.12.2006,  13:35 Найти цитируемый пост)
, все правильно за исключением delete x (нужно delete [] x). 

тоже попалсяsmile VectorMan уже этот момент отметил.
PM MAIL WWW   Вверх
archimed7592
Дата 10.12.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Daevaorn, да я страничку обновить забыл...тут уже все что нужно ответили smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Partizan
Дата 10.12.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



=)) к стыду своему я тоже попался )))


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
WERITAS
Дата 10.12.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Rockie, 
Это тема-развод?  smile 
Цитата
Такой такой код корректен? Сколько раз в данном случае отрабатывает delete?

Код корректный, delete очищает одну переменную, созданную динамически, как уже было отмеченно выше.



--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Xenon
Дата 10.12.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Провакация smile Это из серии  : "Порешаем "головоломки""? smile


--------------------
user posted image  
PM MAIL   Вверх
Rockie
Дата 10.12.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(WERITAS @  10.12.2006,  15:23 Найти цитируемый пост)
Это тема-развод?  smile  

и не думал smile. Это не развод и не провокация, просто хотел показать, что память в конструкторе выделяется динамически. 
В данном примере delete очищает память и вызывает деструктор, в котором в свою очередь очищается память?.. Если delete будет вызыван дважды(для объекта и для переменной x), то отработает ли он по участку памяти, уже очищенной в ~SomeClass(){delete x; }. 



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Partizan
Дата 10.12.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



гмм....у ты думаешь после первого delete pSomeClass всё ещё будет указывать на ту же область памяти?
сомневаюсь) ооочень сомневаюсь)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Daevaorn
Дата 10.12.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Rockie @  10.12.2006,  18:41 Найти цитируемый пост)
и не думал 

а зря. Это иногда полезно;)
Цитата(Rockie @  10.12.2006,  18:41 Найти цитируемый пост)
В данном примере delete очищает память и вызывает деструктор

Наоборот
Цитата(Rockie @  10.12.2006,  18:41 Найти цитируемый пост)
 Если delete будет вызыван дважды(для объекта и для переменной x), то отработает ли он по участку памяти, уже очищенной в ~SomeClass(){delete x; }. 

Судя по всему ты не очень хорошо понимаешь теорию.
PM MAIL WWW   Вверх
zabivator
Дата 10.12.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Rockie, после отработки деструктора класса вызываются сначала деструкторы его мемберов, затем - базовых классов, соответственно в твоем случае удалятся указатель на память, а память удалять нужно руками - поэтому мы в деструкторе пишем delete x
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Rockie
Дата 10.12.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(Partizan @  10.12.2006,  17:49 Найти цитируемый пост)
гмм....у ты думаешь после первого delete pSomeClass всё ещё будет указывать на ту же область памяти?сомневаюсь) ооочень сомневаюсь)


Partizan, imho в этом случае при выходе из ф-ии main() вызовется деструктор, в котором очистится память:
Код
class SomeClass{
private:
    int* x;
public:
    SomeClass(){x = new int(10); }
    ~SomeClass(){delete x; }

};


int main()
{
    SomeClass objSomeClass;

    return 0;
}



А в случае 
Код
  SomeClass* pSomeClass = new SomeClass;

    delete pSomeClass;


delete вызывает деструктор и освобождает память, выделенную под объект. А если в деструкторе уже освобождается память? вот что хотелось бы узнать..


Цитата(Daevaorn @  10.12.2006,  17:52 Найти цитируемый пост)
Судя по всему ты не очень хорошо понимаешь теорию.

Daevaorn, я плохо понимаю ваши посты. Что конкретно не устраивает, порядок слов 
Цитата
В данном примере delete очищает память и вызывает деструктор

?

Судя по всему вы много чего понимаете, но только ничего не скажете.. Ваш пост неинформативен. Хорошо я понимаю теорию, плохо ли - это оффтоп и никого не интересует, вы попросту нафлудили.

Это сообщение отредактировал(а) Rockie - 10.12.2006, 20:57


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
archimed7592
Дата 10.12.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Rockie @  10.12.2006,  20:54 Найти цитируемый пост)
В данном примере delete очищает память и вызывает деструктор
порядок действий. сначала деструктор
потом удаляет


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
zabivator
Дата 10.12.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Rockie, повторяю еще раз: деструктор НЕ освобождает память, выделяемую динамически, либо переданную в класс извне ( через указатели/ссылки). Единственное, что уничтожается после вызова деструктора ( при достижении конца области видимости - для автоматических переменных, при вызове delete - для элементов выделенных при помощи new ) - это ЧЛЕНЫ класса - в твоем случае это УКАЗАТЕЛЬ, а никак не память, на которую он указывает.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Daevaorn
Дата 10.12.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Rockie @  10.12.2006,  21:54 Найти цитируемый пост)
Судя по всему вы много чего понимаете, но только ничего не скажете.. Ваш пост неинформативен. Хорошо я понимаю теорию, плохо ли - это оффтоп и никого не интересует, вы попросту нафлудили.

А Вы попросту нагадилиsmile
Цитата(Rockie @  10.12.2006,  21:54 Найти цитируемый пост)
Что конкретно не устраивает, порядок слов 

Да.
Цитата(Rockie @  10.12.2006,  21:54 Найти цитируемый пост)
delete вызывает деструктор и освобождает память, выделенную под объект. 

да
Цитата(Rockie @  10.12.2006,  21:54 Найти цитируемый пост)
 А если в деструкторе уже освобождается память? вот что хотелось бы узнать..

Там освобождается память не связанная с предыдущей. Там память на которую указывает указатель-член класса.
PM MAIL WWW   Вверх
Rockie
Дата 10.12.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(archimed7592 @  10.12.2006,  20:59 Найти цитируемый пост)
порядок действий. сначала деструктор потом удаляет

это понятно, было бы странно, если бы было наоборот. Надо было мне точнее выражать свои мысли и не давать повода =)
Цитата
Rockie, после отработки деструктора класса вызываются сначала деструкторы его мемберов, затем - базовых классов, соответственно в твоем случае удалятся указатель на память, а память удалять нужно руками - поэтому мы в деструкторе пишем delete x

Цитата(zabivator @  10.12.2006,  21:00 Найти цитируемый пост)
Rockie, повторяю еще раз: деструктор НЕ освобождает память, выделяемую динамически, либо переданную в класс извне ( через указатели/ссылки).

ну это я тоже понимаю
Partizan,  за минус конечно спасибо.. 

Вообще мой вопрос касается расположения объекта в памяти.

То есть объект располагается так:

_______     ____
|            |    |      |
|   obj    |    |  x  |
|            |    |___|
|            |
|            |
|______|

либо так:

_______
|            |
|   obj    |
|            |
|            |
|     x     |
|______|

?
Если так, как во втором случае - то получается что память, выделенная под x удаляется дважды либо нет? 
Вот о чем я спрашивал.


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zabivator
Дата 10.12.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Rockie, нет,дважды она не удаляется. Я чувствую, ты просто не понимаешь, что указатель - это не память, на которую он указывает. На одну и ту же память ссылаться может куча указателей. Суть не в этом. Память выделенная при помощи new, должна освобождаться при помощи delete. В классе у тебя не память лежит, а лшь указатель на нее. ПО этому указателю, раз уж ты в конструкторе вызвал new, нужно вызвать delete. Еще раз: указатель - отдельный объект, в котором хранится адрес выделеной тобою памяти. Автомтически удалится указатель, т.е. адрес. Но память-то никуда не денется. Ее руками чистить надо.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Rockie
Дата 10.12.2006, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



zabivator, я тоже понимаю разницу между указателем и выделенной под него памятью, а также что такое new, delete, конструктор, int, main()..  smile 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zabivator
Дата 10.12.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Rockie, тогда откуда такие странные вопросы? Почему тебе кажется, что она могла удалиться второй раз?
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 11.12.2006, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Rockie, вот какая ситуация
Код
   obj                    *x
----------         ----------------
| int *x | =====>  | int untitled |
----------         ----------------

delete obj делает две вещи:
1. вызывает деструктор. деструктор удаляет *x т. е. освобождает выделеную в конструкторе память.
2. удаляет выделенную под объект память. эта память выделенная под указатель x. не под объект на который указывает x.



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Rockie
Дата 11.12.2006, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата
delete obj делает две вещи:
1. вызывает деструктор. деструктор удаляет *x т. е. освобождает выделеную в конструкторе память.
2. удаляет выделенную под объект память. эта память выделенная под указатель x. не под объект на который указывает x.

archimed7592, да, и об этом же, начиная с первого поста.  smile 
Так вот предположим, что у нас есть сложный объект, который содержит данные. Для некоторых элементов  в нем память выделяется динамически, как 
int* x = new int(10);
Для наглядности можно добавить какие-нибудь другие данные, любые, к примеру
int  y, z; // и тд.
Объект класса тоже создаем динамический:
SomeClass* pSomeClass = new SomeClass;

Насколько я понимаю, delete знает где находится объект и размер объекта. Имея эту информацию можно освободить память, занимаемую объектом. Так вот возможна ли ситуация, что объект в памяти расположится таким образом:

   *obj    
--------------- 
| int *x        |
|                  |
|      ----       |
|     | x  |      |
|      ----       |
|                  |
| int  y         |
| int  z         |
| int* f         |
|                  |
----------------

В деструкторе освободится память, выделенная под
int* x;
а затем будет освобождена память, выделенная под сам объект. Тогда получается, что участок памяти 
      ----       
     | x  |      
      ----       
очищается дважды.
Либо такая ситуация невозможна и объекта класса будет обязательно размещен в памяти отдельно от объекта x. Я спрашивал об этом, а не об основах C++ и уж тем паче не собирался получать за это минусы =)




Это сообщение отредактировал(а) Rockie - 11.12.2006, 01:56


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zabivator
Дата 11.12.2006, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Rockie, ни разу неправильно. Память, выделенная при помощи new int распологается не после указателя, а где придется ( там, где ее new разместит ). Сначала память выделится под все члены класса, а потом уже начнет работать конструктор. Т.е. память выделенная new int не может оказаться между указателем и остальными мемберами.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Rockie
Дата 11.12.2006, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(zabivator @  11.12.2006,  01:55 Найти цитируемый пост)
Rockie, ни разу неправильно.

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

Цитата(zabivator @  11.12.2006,  01:55 Найти цитируемый пост)
 Сначала память выделится под все члены класса, а потом уже начнет работать конструктор. Т.е. память выделенная new int не может оказаться между указателем и остальными мемберами.

вот! smile такой ответ я и имел в виду, спасибо!


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zabivator
Дата 11.12.2006, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Rockie, т.е. ты это и так понимал? Или что? Или про этот ньюнанс забыл?
Пожалуйста.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 11.12.2006, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Rockie, если ты знаешь основы c++, т. е. знаешь, что память под объект выделяется до вызова конструктора, а также знаешь, что new выделяет память не где попало, а там где свободно, то непонятно зачем было задавать вопрос...фсё таки с основами туговато smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
zabivator
Дата 11.12.2006, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



archimed7592, там таких ньюнансов до фига и больше, с опытом придет =)

Это сообщение отредактировал(а) zabivator - 11.12.2006, 02:10
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 11.12.2006, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



zabivator, согласен smile я поначалу думал, что конструктор с деструктором - специальные ф-ции, которые и занимаются работой с памятью smile и для меня было тайной покрытой мраком, когда эти "спец" ф-ции вызываются smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
zabivator
Дата 11.12.2006, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



archimed7592, я долго думал, что временем жизни объектов, присвоенных по ссылке,  заведует ссылка =) так и писал =) пока один раз не задумался, а почему переданные в параметры ( const std::string & ) не удаляются? И почему const не мешает этому? +))) Казусов можно много вспомнить =)
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1389 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.