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

  • MrChiCity3

    MrChiCity3

    14 NİSAN 2008
  • Phlearn Photoshop and Photography Tutorials

    Phlearn Phot

    11 EKİM 2011
  • UKF

    UKF

    2 Aralık 2009