Tôi đang cố gắng "hiện đại hóa" một số mã hiện có.Chuyển unique_ptr đến các hàm
- Tôi có một lớp hiện có biến thành viên "Device * device_".
- Nó sử dụng mới để tạo một cá thể trong một số mã khởi tạo và có "xóa thiết bị_" trong phần hủy.
- Các chức năng thành viên của lớp này gọi nhiều các chức năng khác lấy Thiết bị * làm thông số.
Điều này hoạt động tốt, nhưng để "hiện đại hóa" mã của tôi, tôi nghĩ tôi phải thay đổi biến được định nghĩa là "std::unique_ptr<Device> device_"
và xóa cuộc gọi rõ ràng để xóa mã.
Câu hỏi của tôi là thế này -
- Làm thế nào tôi nên sau đó vượt qua thiết bị _ biến cho tất cả các chức năng mà cần nó như là một paramater?
Tôi có thể gọi .get để nhận con trỏ thô trong mỗi cuộc gọi hàm. Nhưng điều đó có vẻ xấu xí và lãng phí một số lý do để sử dụng một unique_ptr ở nơi đầu tiên.
Hoặc tôi có thể thay đổi mọi chức năng để thay vì tham số loại "Device *", giờ đây nó có tham số loại "std :: unique_ptr &". Mà (đối với tôi) phần nào làm xáo trộn các nguyên mẫu hàm, và làm cho chúng khó đọc.
Thực tiễn tốt nhất cho việc này là gì? Tôi có bỏ lỡ bất kỳ lựa chọn nào khác không?
Tại sao sự thay đổi này sẽ làm cho các mã an toàn hơn và nói chung là tốt hơn? Từ mô tả của bạn, tôi sẽ nói rằng điều ngược lại là đúng. –
@ James Kanze Tôi đồng ý, unique_ptr dường như không mua bất cứ thứ gì trong trường hợp này. – juanchopanza
Bạn cũng có thể đúng. Tôi thích "an toàn" của unique_ptr trong đó bạn không cần phải nhớ để xóa nó, nhưng nó dường như có một số chi phí trong trường hợp này. – jcoder