2010-10-10 35 views
5

tôi phải giao tiếp với một số mã C từ lớp C++ constructor (thư viện Intel)Malloc trong C++ constructor


    class A{ 
    A{ 
    x = ippiMalloc(); 
    if(x==NULL) ... 
    } 
    } 

Trong hàm constructor malloc (phiên bản intel) được sử dụng. Nếu hàm ippiMalloc không thành công thì cách xử lý chính xác nó là gì. Ném ngoại lệ?

+0

Thư viện nào đây? – rkellerm

+0

Ippi (Tích hợp hiệu suất nguyên thủy) – Ross

+1

Cảnh báo nếu bạn mới làm quen với điều này: nếu có con trỏ thông minh của bên thứ ba có sẵn với ngữ nghĩa quyền sở hữu bạn muốn, có thể là 'shared_ptr', thì sử dụng nó thay cho con trỏ thô. Nếu không, A phải là một lớp dành riêng để quản lý việc phân bổ và giải phóng 'x'. Đây không chỉ là thoáng mát-cổ tích "tách mối quan tâm là thực hành tốt": nó là đáng kinh ngạc khó xử để viết một lớp học ngoại lệ an toàn có trách nhiệm quản lý nhiều hơn một tài nguyên, và một chút khó khăn ngay cả với chỉ một ... –

Trả lời

8

Có, ngoại lệ có thể là cách thích hợp nhất để xử lý lỗi ở đây - ít nhất đó sẽ là cách sạch nhất. Đây cũng là điều mà toán tử "mới" sẽ làm khi thất bại.

Nếu ứng dụng của bạn không nhận thức được ngoại lệ, bạn có vấn đề. Trong trường hợp đó, một phương pháp nhà máy trên lớp có thể có ý nghĩa.

static A * create() { ... } 

Tại đây, bạn có thể gói phần mềm này vào một chương trình không ngoại lệ, có khả năng trả về null nếu bạn không thể tạo đối tượng.

+0

Sau đó, một lần nữa, nếu ứng dụng của bạn không nhận thức được null, bạn chỉ cần giới thiệu các vấn đề thay vì xóa chúng. – MSalters

+0

Nếu ứng dụng của bạn không phải là ngoại lệ, hãy biết/phải/đang kiểm tra các giá trị trả lại. Bạn thực sự không có tùy chọn khác: ngoại lệ và/hoặc giá trị trả lại. –

4

Trước hết, thêm dấu ngoặc đơn vào hàm tạo :) Và có, tôi sẽ bỏ phiếu cho một ngoại lệ, vì các lựa chọn thay thế không dễ chịu, như thiết lập một số bool trong lớp như object_state_is_not hợp lệ hoặc gì đó.

1

Tham gia các câu trả lời trước - và here là giải thích tốt về lý do ngoại lệ là cách xử lý lỗi tốt nhất trong các nhà xây dựng. (C++ FAQ Lite)