Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 00:34 27.06.24 
Компютри и Интернет
   >> Програмисти
Всички теми Следваща тема *Кратък преглед

Тема delete / multiple inheritanceнови  
Автор ~!@$%amp;^*()_+ (целия горен ред)
Публикувано15.06.05 03:47



днес се замислих върху следното:

ако имам:

class A {virtual ~A();};
class B {virtual ~B();};
class C: public A, public B {virtual ~C();};

и после:
{
C *c = new C;
B *b = c;

delete b;
}

че стойностите на b и c са различни е ясно
че деструкторите ще се извикат коректно, ок
това което ме тормози е какъв адрес ще бъде подаден на менажера на паметта, след като стойността на b не сочи в началото на блока?



Тема Re: delete / multiple inheritanceнови [re: ~!@$%amp;^*()_+]  
Автор void* (психопат)
Публикувано15.06.05 10:42



подава се адресът на most derived обекта. за да се разбере кой е той трябва да има поне една виртуална функция, а по стандарт за такава е избран деструкторът.



5.3.5 Delete [expr.delete]

1 The delete-expression operator destroys a most derived object (1.8) or array created by a new-expression.

delete-expression:
::opt delete cast-expression
::opt delete [ ] cast-expression

The first alternative is for non-array objects, and the second is for arrays. The operand shall have a pointer type, or a class type having a single conversion function (12.3.2) to a pointer type. The result has type void.

...

3 In the first alternative (delete object), if the static type of the operand is different from its dynamic type, the static type shall be a base class of the operand's dynamic type and the static type shall have a virtual destructor or the behavior is undefined. In the second alternative (delete array) if the dynamic type of the object to be deleted differs from its static type, the behavior is undefined.73)

unsigned


Тема Re: delete / multiple inheritanceнови [re: ~!@$%amp;^*()_+]  
Автор Duncan Griffin (Потребител)
Публикувано15.06.05 10:43



Programmer's rule #9: If you are not sure how something works, test it.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.


Тема Re: delete / multiple inheritanceнови [re: Duncan Griffin]  
Авторow4o (Нерегистриран)
Публикувано15.06.05 12:48



защо точно #9?



Тема Re: delete / multiple inheritanceнови [re: ow4o]  
Автор Duncan Griffin (Потребител)
Публикувано15.06.05 13:52



Щото преди него има още 8.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.


Тема Re: delete / multiple inheritanceнови [re: Duncan Griffin]  
Автор ~!@$%amp;^*()_+ (целия горен ред)
Публикувано15.06.05 16:49



тествах го, само че гаранция франция, дали ще бачка на различни компилатори и какви странични ефекти може да има



Тема Re: delete / multiple inheritance [re: ~!@$%amp;^*()_+]  
Автор Duncan Griffin (Потребител)
Публикувано15.06.05 20:29



Абе я ти вземи парите, пък предложи 1 месец безплатен съпорт и бъгфиксинг.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.

Редактирано от Duncan Griffin на 15.06.05 20:29.



Тема Re: delete / multiple inheritanceнови [re: Duncan Griffin]  
Автор ~!@$%amp;^*()_+ (целия горен ред)
Публикувано15.06.05 22:04



идеята я бива, ама съм на заплата
а мразя да си уплътнявам времето с дебъгване.
единственото което мразя повече е четене на чужд код и естествено, върха на черешката, дебъгване на чужди лайна



Тема Re: delete / multiple inheritanceнови [re: ~!@$%amp;^*()_+]  
Автор SoulDeaD (no comment)
Публикувано15.06.05 23:01



абе зависи как е написан чуждия код, понякога е добре дошъл :)
но за чуждите лайна си абсолютно прав, да мрат лайнотворците!




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.