Tôi đang phát triển mô phỏng tiến hóa Darwin. Vì lý do hiệu suất, nó được viết bằng C++. Các sim được đại diện bởi một thể hiện của thế giới. Các loài động vật được đại diện bởi các trường hợp của động vật, một đối tượng khá phức tạp. Thế giới có hai phương pháp quan trọng:Cách đúng để vạch trần một đối tượng sống ngắn phức tạp
animal_at(int i)
và
evolve(int n).
animal_at trả về một con trỏ thô không null cho trường hợp động vật đại diện cho động vật thứ i.
phát triển các tiến bộ mô phỏng có thể vô hiệu hóa bất kỳ con trỏ nào được trả về bởi animal_at. Tôi muốn làm cho sim và động vật dễ dàng truy cập từ bên ngoài. Tôi có các ràng buộc cụ thể về python, nhưng tôi đang xem xét việc học CORBA hoặc Ice để thực hiện một giao diện chung chung hơn. Vấn đề là làm thế nào tôi nên phơi bày động vật. Tôi có hai ý tưởng, không ai trong số đó cảm thấy thỏa đáng: 1) Viết lại mã một chút để sử dụng shared_ptr thay vì ptr thô và sử dụng phần mềm trung gian để hiểu ngữ nghĩa shared_ptr. 2) Tạo một "proxy lười sâu" có cấu trúc giống như Động vật. Các thành viên của nó sẽ là proxy cho các thành viên của Animal, đệ quy. animal_at sẽ thực sự được gọi trong giây phút trước khi đề cập đến dữ liệu thực tế - con trỏ sẽ được sử dụng và ngay lập tức bị ném đi. Điều này sẽ thực hiện ngữ nghĩa "thời điểm cuối cùng".
Tôi không thích 1) vì tôi sẽ phải giới thiệu trạng thái "zombie" của đối tượng, trông không phù hợp với tôi. Tôi không thích 2) vì mục đích duy nhất của proxy là triển khai ngữ nghĩa "khoảnh khắc cuối cùng".
Tôi đang tìm cách tự động không xâm nhập (sử dụng tạo mã) để đạt được điều này, bởi vì tôi không muốn làm mờ nghĩa của mã gốc. Có bất kỳ tên "chính thức" nào cho những gì tôi gọi là ngữ nghĩa "khoảnh khắc cuối cùng" không?
Tôi sẽ xem xét kỹ hơn về tăng :: weak_ptr. Câu hỏi đặt ra là, điều này sẽ tương tác với CORBA như thế nào. Tôi không muốn học CORBA chỉ để tìm ra rằng "không, CORBA không hỗ trợ ngữ nghĩa cuối cùng". Cảm ơn vi đa trả lơi. –
CORBA sử dụng tính tham chiếu của riêng nó với _var và không hỗ trợ khái niệm về một con trỏ yếu. Tôi nghĩ nếu bạn sử dụng một đối tượng không còn tồn tại ở phía máy chủ, bạn sẽ nhận được một ngoại lệ chứ không phải là một sự cố. Với CORBA khái niệm là toàn bộ máy chủ có thể đi xuống. Có một điều như là một ngoại lệ thoáng qua nơi máy chủ bị hỏng nhưng các đối tượng đã được tạo ra với "persistence" sao cho chúng sẽ tồn tại khi nó trở lại một lần nữa. – CashCow