2016-03-20 17 views
0

Yanlışlıkla, bir fabrika işlevi kullandım ve döndürülen işaretçiyi herhangi bir yere kaydetmedim. Emin değilim Sorgum aptalca ya da değil ise, ama ne olursa olsun, eğer dinamik olarak, bir fonksiyonda bellek tahsis edersek, o hafızayı geri göndeririz, ama saklamak için herhangi bir işaretçi sağlamaz mıyız? hafızaya ne olacak? Bunu silmek için hiç şansın olmadığı anlamına mı geliyor? ve bunun gibi : Program kapatır ve işletim sistemi bu bellek reclaims kadarİşaretçi yoksa, fabrika işlevi işaretçisini alırsa ne olur?

Orada
Aclass* getAclass() 
{ 
    return new Aclass(); 
} 

int main() 
{ 
    getAclass(); 
} 
+0

İyi bir fabrika bir 'std :: unique_ptr ' döndürür. Bu özel sorunu çözüyor, ama aynı zamanda daha gerçekçi koddaki genel problemi çözüyor: “std :: cout << getAclass() -> getDescription();” Örneğin. Ayrıca, fabrikaları “makeFoo” olarak adlandırmak için büyüyen bir sözleşme var. – MSalters

cevap

3

o kalacaktır. En azından bellek yöneticileri veya donanım belleği yöneticileri olan sistemlere sahip işletim sistemleri.

"garbage collectors" öğesinin bir işaretçinin kullanılmayan belleğe işaret ettiğini ve bu belleğin kendisini kaldıracağını fark eden bazı diller için mümkündür. Dönen bir işaretçi olmadan belleği elde edemezsiniz. Bu işaretçiyi kullanmazsanız, belleğin artık kullanılmadığını anladığını varsayarak toplanan çöpler toplanır.

+0

@shayan C++ etiketini eklemeden önce sorunuzu yanıtladı. C++ için – Rob

+1

çöp toplayıcıları var, ancak birkaç kişi bunları kullanıyor –

İlgili konular