|
Тема
|
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 не сочи в началото на блока?
| |
|
подава се адресът на 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
| |
|
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?
| |
|
Щото преди него има още 8.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
| |
|
тествах го, само че гаранция франция, дали ще бачка на различни компилатори и какви странични ефекти може да има
| |
|
Абе я ти вземи парите, пък предложи 1 месец безплатен съпорт и бъгфиксинг.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.Редактирано от Duncan Griffin на 15.06.05 20:29.
| |
|
идеята я бива, ама съм на заплата
а мразя да си уплътнявам времето с дебъгване.
единственото което мразя повече е четене на чужд код и естествено, върха на черешката, дебъгване на чужди лайна
| |
|
абе зависи как е написан чуждия код, понякога е добре дошъл :)
но за чуждите лайна си абсолютно прав, да мрат лайнотворците!
| |
|
|
|
|