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

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • SaMmM123

    SaMmM123

    3 Mayıs 2006
  • Top10Series

    Top10Series

    26 Kasım 2008