我越来越多地听到,我应该使用智能指针而不是裸指针,尽管我已经实现了有效的内存泄漏系统。
请问使用智能指针正确的编程方法是什么?即使我检查分配的内存块上的内存泄漏,是否真的应该使用它们?这还取决于我吗?如果我不使用它们,这是否可以被视为编程弱点?
如果强烈推荐智能指针(例如:std::auto_ptr),我应该使用它们而不是每个裸指针吗?
最佳答案
您应该使用 RAII 来处理所有资源分配。
智能指针只是该规则的一种常见特例。
智能指针不仅仅是shared_ptr
。存在具有不同所有权语义的不同智能指针。使用适合您需求的那一款。 (主要有scoped_ptr
、shared_ptr
、weak_ptr
和auto_ptr
/unique_ptr
(更喜欢后者(如果可用)。根据您的编译器,它们可能在标准库中可用,作为 TR1 的一部分,或者根本不可用,在这种情况下,您可以通过 Boost 库获取它们。
是的,您绝对应该使用这些。它不会花费您任何成本(如果操作正确,您会损失零性能),并且会为您带来很多好处(内存和其他资源会自动释放,您不必记住手动处理它,并且使用资源的代码得到更短更简洁)
请注意,并非每个指针使用都代表某种资源所有权,因此并非所有原始指针使用都是错误的。如果您只需要指向其他人拥有的对象,那么原始指针非常适合。但是如果您拥有该对象,那么您应该获得它的适当所有权,或者通过为类本身提供 RAII 语义,或者通过将其包装在智能指针中。
关于c++ - 使用智能指针作为编程标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142142/