Đôi khi bạn cần phải viết một constructor có thể thất bại. Chẳng hạn, giả sử tôi muốn khởi tạo một đối tượng bằng đường dẫn tệp, đại loại như
obj = new Object("/home/user/foo_file")
Miễn là đường dẫn trỏ đến một tệp thích hợp thì mọi thứ đều ổn. Nhưng nếu chuỗi không phải là một đường dẫn hợp lệ, mọi thứ sẽ bị phá vỡ. Nhưng bằng cách nào?
Bạn có thể:
- ném một ngoại lệ
- trả về đối tượng null (nếu ngôn ngữ lập trình của bạn cho phép các nhà xây dựng trả về các giá trị)
- trả về một đối tượng hợp lệ nhưng với một cờ cho biết rằng đường dẫn của nó không được đặt đúng (ugh)
- khác?
Tôi giả định rằng "các thực tiễn tốt nhất" của các ngôn ngữ lập trình khác nhau sẽ thực hiện điều này khác nhau. Chẳng hạn, tôi nghĩ ObjC thích (2). Nhưng (2) sẽ không thể thực hiện trong C ++ khi các hàm tạo phải có khoảng trống làm kiểu trả về. Trong trường hợp đó tôi cho rằng (1) được sử dụng.
Trong ngôn ngữ lập trình bạn chọn, bạn có thể chỉ ra cách bạn xử lý vấn đề này và giải thích tại sao không?
void
- họ trả về một đối tượng.
new
gọi operator new
để phân bổ bộ nhớ, sau đó xây dựng để điền vào nó. Hàm tạo không trả về bất cứ thứ gì và new
trả về con trỏ mà nó nhận được operator new
. Dù "không trả lại bất cứ điều gì" ngụ ý "trả lại void
" là tùy thuộc vào lấy.