delete z poliformizmem?

0

class A 
{

int a;

virtual void test() = 0;
}

class B : public A
{

int b, c, d, e, f;

void test();
}

A* aa = new B();
delete aa;

Jak widać klasa A ma x bajtów a klasa B >x Czy po wywołaniu delete na wskaźniku do A tworzę wyciek pamięci?

1

Tak, ponieważ w klasie bazowej nie masz zdefiniowanego destruktora wirtualnego.

0

class A
{

int a;

virtual void test() = 0;

virtual ~A() = default;
}

class B : public A
{

int b, c, d, e, f;

void test();
}

A* aa = new B();
delete aa;


Czy to załatwia sprawę? Czy muszę zadeklarować w B?
0

Wystarczy.

0

Kompilator nawet o tym ostrzega (jeśli pola w klasie B lub samo B mają istotny destruktor):
http://melpon.org/wandbox/permlink/SLpyKlFPkwhX4B9W
http://melpon.org/wandbox/permlink/2g4EBD1W9PuAeNqf

0 użytkowników online, w tym zalogowanych: 0, gości: 0