Chúng tôi có thư viện C++ mà chúng tôi cung cấp cho một số khách hàng khác nhau. Gần đây, chúng tôi đã thực hiện chuyển đổi từ việc sử dụng con trỏ thô trong giao diện công khai để sử dụng tăng :: sharedptr thay thế. Điều này đã cung cấp một lợi ích to lớn, như bạn có thể đoán, trong đó bây giờ các khách hàng không còn phải lo lắng về những người cần phải xóa những gì và khi nào. Khi chúng tôi thực hiện công tắc, tôi tin rằng đó là điều đúng để làm, nhưng nó làm tôi bực mình vì chúng tôi phải đưa thứ gì đó từ thư viện của bên thứ ba vào giao diện công cộng của chúng tôi - nói chung là bạn tránh điều đó nếu có thể. Tôi đã hợp lý hoá nó rằng việc tăng cường thực tế là một phần của ngôn ngữ C++ bây giờ, và trường hợp sử dụng của chúng ta yêu cầu cả mã máy khách lẫn thư viện giữ các con trỏ tới các đối tượng. Tuy nhiên gần đây, một trong những khách hàng của chúng tôi đã hỏi chúng tôi liệu chúng tôi có thể chuyển sang sử dụng lớp con trỏ thông minh trung tính trong giao diện hay không, vì thư viện của chúng tôi về cơ bản đang buộc họ vào một phiên bản cụ thể - một điểm mà tôi chắc chắn hiểu và đánh giá cao. Vì vậy, bây giờ tôi tự hỏi những gì các khóa học tốt nhất của hành động có thể được. Tôi đã suy nghĩ về nó một chút, và tự hỏi về việc tạo ra một lớp con trỏ thông minh đơn giản mà chỉ đơn giản là tổ chức một con trỏ thông minh tăng thực sự. Nhưng sau đó các khách hàng có lẽ sẽ ngay lập tức nhồi nhét một trong những thứ đó vào hương vị của họ về tăng :: sharedptr, và sau đó chúng tôi sẽ là ba con trỏ được chia sẻ sâu - có thể là một vấn đề, hoặc có thể không. Dù sao, tôi rất muốn nghe một số ý kiến từ cộng đồng về cách tốt nhất để giải quyết vấn đề này.Sử dụng tăng cường :: shared_ptr trong giao diện công cộng của thư viện
Chỉnh sửa: Ban đầu tôi đã nói chuyển quyền sở hữu, nhưng tôi nên đã chỉ định mã đó trên cả hai mặt của ranh giới API cần giữ con trỏ đến đối tượng.
Có, nhưng chúng tôi không thể buộc khách hàng của chúng tôi chuyển sang Visual Studio 2008, trong đó có TR1, IIRC. Một số vẫn còn trên VS 2005. –
Bạn có thể bao gồm thư mục Boost TR1 với tiêu đề thư viện của mình không? Tôi phải xem xét giấy phép để xem liệu đó có phải là hợp pháp hay không, nhưng có lẽ nó là như vậy. Ngoài ra, kể từ khi tăng :: shared_ptr <> chỉ đơn giản là một mẫu, không có thư viện được chia sẻ hoặc tĩnh là cần thiết. –
Lưu ý rằng TR1 không phải là một phần của ngôn ngữ như vậy, nhưng đó là một bộ sưu tập các thư viện thông tin (chính thức) có thể là một phần của tiêu chuẩn ngôn ngữ trong tương lai. Xem tại đây: http://www.iso.org/iso/standards_development/processes_and_procedures/deliverables/iso_tr_deliverable.htm –