Thỉnh thoảng, đối với những khoảnh khắc thoáng qua, tôi nghĩ auto_ptr rất tuyệt. Nhưng hầu hết thời gian tôi nhận ra rằng có nhiều kỹ thuật đơn giản hơn làm cho nó không liên quan. Ví dụ, nếu tôi muốn có một đối tượng được giải phóng tự động, ngay cả khi một ngoại lệ được ném, tôi có thể làm mới đối tượng và gán cho một auto_ptr. Rất tuyệt! Nhưng tôi có thể dễ dàng tạo ra đối tượng của tôi như là một biến địa phương, và để cho ngăn xếp chăm sóc nó (duh!).Để tắt auto_ptr
Vì vậy, tôi không quá ngạc nhiên khi tôi thấy google C++ coding standards cấm sử dụng auto_ptr. Google nói rằng scoped_ptr nên được sử dụng thay thế (nếu cần một con trỏ thông minh).
Tôi muốn biết nếu có ai, trái với trải nghiệm của mình, có thể đưa ra lý do vững chắc khi auto_ptr là điều tốt nhất hoặc đơn giản nhất để sử dụng. Nếu không, sau đó tôi cho rằng tôi sẽ cấm sử dụng nó bản thân mình (sau google dẫn).
cập nhật: Đối với những người tỏ ra quan tâm, tôi không chấp nhận tiêu chuẩn của google. Ví dụ, chống lại lời khuyên google, tôi đồng ý xử lý ngoại lệ nên được kích hoạt. Tôi cũng thích sử dụng macro tiền xử lý, chẳng hạn như printable enum tôi đã tạo. Nó chỉ là chủ đề auto_ptr đánh tôi.
update2: Hóa ra câu trả lời của tôi đến từ hai trong số những người trả lời dưới đây và note from Wikipedia. Đầu tiên, Herb Sutter đã cho thấy một sử dụng hợp lệ (thành ngữ chìm nguồn và thành phần đối tượng liên kết suốt đời). Thứ hai, có những cửa hàng mà TR1 và tăng không có sẵn hoặc bị cấm và chỉ cho phép C++ 03. Thứ ba, theo Wikipedia, thông số C++ 0x đang ngừng sử dụng auto_ptr và thay thế nó bằng unique_ptr. Vì vậy, câu trả lời của tôi là: sử dụng unique_ptr nếu có sẵn cho tôi (trên tất cả các nền tảng trong xem xét) khác sử dụng auto_ptr cho các trường hợp mà Sutter mô tả.
Hướng dẫn kiểu Google cũng cấm ngoại lệ. Chúng tôi có cấm các trường hợp ngoại lệ vì ai đó khiến họ sai và hướng dẫn về phong cách của Google cấm họ không? Số – sharptooth
không tuân theo nguyên tắc của Google, nói chung, chúng cụ thể cho chúng và bao gồm nhu cầu tích hợp với codebase C khổng lồ của chúng. (Có nhiều lý do không sử dụng 'auto_ptr'). –