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

  • Engadget

    Engadget

    18 EYLÜL 2006
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008