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

  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • lissaandbeauty

    lissaandbeau

    24 Aralık 2011
  • Machinima

    Machinima

    17 Ocak 2006