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

  • campos9896

    campos9896

    24 Mart 2012
  • Nickcidious

    Nickcidious

    6 HAZİRAN 2011
  • wwjoshdo

    wwjoshdo

    25 Mayıs 2009