Code trên đúng rùi nhưng hơi bị quái, tui dùng g++ chạy ầm ầm đây có điều constructor chẳng bao h call, cậu quá tải kiểu đời mới, new không trả về thì lấy gì mà khởi tạo đối tượng hả cậu ?
Mình đang sử dụng tc++3.0 và phải tìm hiểu về chương trình sau:
mình không hiểu cách dùng "throw(bad_alloc)" cũng như "throw bad_alloc()" ở cuối.Tc++3.0 cũng báo lỗi "declaration terminated incorrectly" ở đoạn mã khai báo nạp chồng toán tử new.các bạn giải đáp hộ mình nhé.ThanksC++ Code:
//: C13:NoMemory.cpp // Constructor isn't called // If new returns 0 #include <iostream> #include <new> // size_t definition using namespace std; void my_new_handler() { } class NoMemory { public: NoMemory() { } void* operator new(size_t sz) throw(bad_alloc){// tc++3.0 bao loi throw bad_alloc(); // "Out of memory" } }; int main() { set_new_handler(my_new_handler); NoMemory* nm = new NoMemory; } ///:~
Code trên đúng rùi nhưng hơi bị quái, tui dùng g++ chạy ầm ầm đây có điều constructor chẳng bao h call, cậu quá tải kiểu đời mới, new không trả về thì lấy gì mà khởi tạo đối tượng hả cậu ?
throw(bad_alloc) viết trong khai báo hàm để khai báo rằng hàm này có thể chứa lệnh throw bad_alloc(). Đây là cú pháp mới, compiler cũ có thể không biết. Nếu TC++ 3 không xử lý được bạn hãy thử dùng compiler khác.
ví dụ này mình lấy ở trong Thinking in c++ (Tica18).Ví dụ chứng minh rằng khi mà không còn bộ nhớ thì new trả về giá trị null và hàm khởi tạo không bao giờ được gọi.Bạn có thể giải thích giúp mình ý nghĩa của câu lệnh "throw bad_alloc()".Tại sao rõ ràng mình còn nhiều bộ nhớ, thế mà dùng lệnh này lại cho được kết quả là toán tử new thực hiện không thành công?Thanks
google :
std::bad_alloc!