SORU
25 EYLÜL 2008, PERŞEMBE


Bir nesne, sabit bir referans döndürmek yerine bir kopyasını

Buna rağmen bir std döndüren bazı alıcı yöntemleri rastladım bazı kod yeniden yapılandırması::string. Örneğin şöyle bir şey:

class foo
{
private:
    std::string name_;
public:
    std::string name()
    {
        return name_;
    }
};

Kesinlikle daha iyi alıcı const std::string& dönen olurdu? Geçerli yöntem olarak verimli olmayan bir kopya veriyor. Dönen sabit bir referans yerine, herhangi bir sorun neden olur?

CEVAP
25 EYLÜL 2008, PERŞEMBE


Bu bir soruna neden olabilir tek yolu arayan başvurusu, yerine dize kopyasını saklar, ve nesne yok edilir sonra bunu kullanmaya çalışırsa. Bu gibi:


foo *pFoo = new foo;
const std::string &myName = pFoo->getName();
delete pFoo;
cout << myName;  // error! dangling reference

Mevcut işlevi bir kopyasını verir, çünkü ancak o zaman varolan kodu herhangi bir kırılma olmaz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008
  • VOICE TV

    VOICE TV

    2 Aralık 2010