Tôi muốn một trong hai điều này:
std::unique_ptr<Solver> S ( UseDummySolver
? createDummySolver()
: new STPSolver(true) );
Solver& STP = *S;
hay này:
std::shared_ptr<Solver> S ( UseDummySolver
? createDummySolver()
: new STPSolver(true) );
std::shared_ptr<Solver> STP = S;
Cả tránh một vấn đề với mã bạn đã có ở đó: chúng ta không cần phải làm quyết định con trỏ đến hãy gọi delete
khi các đối tượng rời khỏi phạm vi (hoặc, trên thực tế, hãy nhớ rằng cần phải gọi số delete
). Thay vào đó, chúng tôi chỉ đợi cho đến khi các biến rời khỏi phạm vi, khi đó đối tượng Solver
sẽ tự động bị xóa. STP
là trường hợp đầu tiên umambiguously chỉ là một cách khác để truy cập các đối tượng trong khi nó trong phạm vi, trong trường hợp thứ hai nó là một "đồng sở hữu" độc lập của đối tượng và cả hai con trỏ độc lập có thể được giao lại.
Đó là một * rất xấu xí * có nghĩa là chỉ định hai biến cùng một lúc. * (Ghi mã [rs] như thế này với lửa) * – user7116
Có nhiều lý do mà mã này rõ ràng là hút. Phần chuyển nhượng kép chỉ là một trong số đó. Không sử dụng RAII là khác. –
Vâng ... Tôi thậm chí còn không nhận ra điều đó là hợp pháp, và tôi chưa từng thấy điều đó trước đây! – steveha