Özel durum nesnesinin nasıl oluşturulduğunu bilmek istiyorum. ve işleyici işlev parametresinin neden yerleşik olmayan bir başvuru kaynağı olabilir?Özel durum nesnesi ömür boyu
class E{
public:
const char * error;
E(const char* arg):error(arg){
cout << "Constructor of E(): ";}
E(const E& m){
cout << "Copy constructor E(E& m): " ;
error=m.error;
}
};
int main(){
try{
throw E("Out of memory");
}
catch(E& e){cout << e.error;}
}
Çıktı: E() ait Yapıcı: Örneğin
Bellek yetersiz
yüzden throw E("out of memory")
var ve E("out of memory")
sadece geçici bir nesnedir ve hiçbir nesne vardır hiçbir kopya kurucusu çalıştırılmadığı için E("out of memory")
dışında oluşturuldu. Yani bu E("out of memory")
sadece geçici bir nesne olsa bile, bir construder referansı alan bir işleyiciye sahibim.
Bunun neden yapıldığını bana açıklayabilir misiniz?
. Yani bu E ("bellekten çıkmış") sadece geçici bir nesne olsa bile, bende olmayan bir referansa sahip bir işleyicim var - http://en.wikipedia.org/wiki/Copy_elision –
@ skwllsp: Bu optimizasyondan kaynaklanıyor. Bu, geçici nesnenin yaratılmadığı ve argümanın doğrudan istisna nesnesine aktarıldığı anlamına mı geliyor? – AlexDan