Bildiklerim
Geçici bir nesnenin const referansı döndürmesinin tamam olduğunu biliyorum! (Bu örnekte :)alt sınıfın const başvuru başvurusu
class A {
public:
virtual const A& clone() { return (A()); }
virtual std::string name() const { return ("A"); }
};
Returning temporary object and binding to const reference
Ama böyle! Bunu yapmak istiyorum istiyorsanız
, Hala doğrudur:
class B : public A {
public:
virtual const A& clone() { return (B()); }
virtual std::string name() const { return ("B"); }
};
evet düşünürdüm, ama yürütme zamanında iade nesne hala sayılır bir bu örnekte olduğu gibi, bir nesne (:)
main.cpp
#include <iostream>
#include <string>
int main() {
B bb;
A* aa = &bb;
std::cout << aa->clone().name() << std::endl;
}
çıkış
valgrind ./a.out
==14106== Use of uninitialised value of size 8
==14106== at 0x401BF9: main (main.cpp:8)
==14106== Uninitialised value was created by a stack allocation
==14106== at 0x401BF2: main (main.cpp:8)
B
Bu yay .. B var .. ancak bu uyarı oldukça horrifing olduğunu ....
düzenle benim hatasını gördüğünü biliyorum size
Teşekkür ... ama başka şeyler bilmek istersiniz hakkında ...
Bu yürütüldüğünde, yığınta tam olarak ne oluyor?
@Chris Drew ... errrh Anlamıyorum – CollioTV
"Geçici bir nesnenin bir const başvuru döndürmesinin tamam olduğunu biliyorum!" Hayır değil. –
http://stackoverflow.com/questions/11560339/returning-temporary-object-and-binding-to-const-reference "Bu bir C++ özelliğidir. Kod geçerli ve tam olarak göründüğü gibi görünüyor.", "C++, geçici bir nesneyi yığında bulunan bir referansa bağlanmanın referansın ömrü boyunca geçici olarak ömrünü uzattığını kasıtlı olarak belirtir" – CollioTV