SORU
25 AĞUSTOS 2011, PERŞEMBE


Taban işaretçisi türetilmiş nesneleri bir dizi için bir işaret olabilir mi?

Bir iş görüşmesine gittim bugün ve bu ilginç bir soru verildi.

Bellek sızıntısı ve sanal dtor yok aslında yanı sıra, kod neden kaza yapar?

#include <iostream>

//besides the obvious mem leak, why does this code crash?

class Shape
{
public:
    virtual void draw() const = 0;
};

class Circle : public Shape
{
public:
    virtual void draw() const { }

    int radius;
};

class Rectangle : public Shape
{
public:
    virtual void draw() const { }

    int height;
    int width;
};

int main()
{
    Shape * shapes = new Rectangle[10];
    for (int i = 0; i < 10;   i)
        shapes[i].draw();
}

CEVAP
25 AĞUSTOS 2011, PERŞEMBE


Böyle dizin olamaz. Rectangles bir dizi tahsis ve shapes İlk işaretçisi saklı. shapes[1] ne zaman (shapes 1) kaldırma. Bu gelecek için bir işaretçi Rectangle ama Shape çatışmanın bir dizi sonraki Shape ne olurdu bir işaretçi vermeyecektir. Tabii ki, bu tanımsız davranıştır. Sizin durumunuzda, şanslı olmak ve kaza alıyoruz.

Rectangle bir işaretçi kullanarak dizin oluşturma düzgün çalışması yapar.

int main()
{
   Rectangle * shapes = new Rectangle[10];
   for (int i = 0; i < 10;   i) shapes[i].draw();
}

Dizideki Shapes çeşit var polymorphically bir dizi gerekir bunları kullanmak istiyorsanızişaretçilerŞekil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AlaskanGrizzly

    AlaskanGrizz

    30 EKİM 2009
  • PlugResearch

    PlugResearch

    22 Mart 2006
  • Professor Messer

    Professor Me

    27 NİSAN 2007