Tôi muốn biết đối tượng ngoại lệ được tạo ra như thế nào? và tại sao tham số hàm xử lý có thể là tham chiếu không const?Đời sống đối tượng ngoại lệ
Ví dụ:
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;}
}
Output: Constructor của E(): Hết bộ nhớ
vì vậy tôi có throw E("out of memory")
và E("out of memory")
chỉ là một đối tượng tạm thời và không có đối tượng có được tạo ra trừ E("out of memory")
vì không có hàm tạo bản sao nào được gọi ra. vì vậy mặc dù điều này E("out of memory")
chỉ là một đối tượng tạm thời, tôi có một trình xử lý lấy tham chiếu không phải là const.
Bạn có thể giải thích cho tôi lý do tại sao điều này có thể xảy ra không?
'vì không có hàm tạo bản sao nào được gọi. vì vậy mặc dù E ("bộ nhớ") này chỉ là một đối tượng tạm thời, tôi có một trình xử lý tham chiếu không tham chiếu '- http://en.wikipedia.org/wiki/Copy_elision –
@skwllsp: điều này là do optimization.does nó có nghĩa là đối tượng tạm thời đã không được tạo ra và đối số của nó được chuyển trực tiếp đến đối tượng ngoại lệ? – AlexDan