Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Xin giải đáp về đoạn mã nạp chồng

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    1

    Mặc định Xin giải đáp về đoạn mã nạp chồng

    Mình đang sử dụng tc++3.0 và phải tìm hiểu về chương trình sau:
    C++ Code:
    1. //: C13:NoMemory.cpp
    2. // Constructor isn't called
    3. // If new returns 0
    4. #include <iostream>
    5. #include <new> // size_t definition
    6. using namespace std;
    7.  
    8. void my_new_handler() {
    9.   cout << "new handler called" << endl;
    10. }
    11.  
    12. class NoMemory {
    13. public:
    14.   NoMemory() {
    15.     cout << "NoMemory::NoMemory()" << endl;
    16.   }
    17.   void* operator new(size_t sz) throw(bad_alloc){// tc++3.0 bao loi
    18.     cout << "NoMemory::operator new" << endl;
    19.     throw bad_alloc(); // "Out of memory"
    20.   }
    21. };
    22.  
    23. int main() {
    24.   set_new_handler(my_new_handler);
    25.   NoMemory* nm = new NoMemory;
    26.   cout << "nm = " << nm << endl;
    27. } ///:~
    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é.Thanks

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    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 ?

  3. #3
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    443

    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.

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    1

    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

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    google :
    std::bad_alloc
    !

Các đề tài tương tự

  1. Cung cấp giấy ik plus, Paper One, Plus A+, Double A, Giấy Thái Lan, Giấy Bãi Bằng, bìa màu, băng dính, mica các loại
    Gửi bởi dungptvietthanh trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-06-2013, 04:05 PM
  2. Chung cư Đại Thanh giảm sốc 10tr/vnđ cho các căn hộ. giảm và liên tục giảm…!!
    Gửi bởi lanthanh91 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 09-10-2012, 10:27 AM
  3. Trả lời: 0
    Bài viết cuối: 06-08-2012, 07:01 PM
  4. Trả lời: 0
    Bài viết cuối: 04-08-2012, 03:08 PM
  5. Trả lời: 0
    Bài viết cuối: 24-05-2012, 04:04 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn