Eam*_*nne 18
std::auto_ptr,boost::scoped_ptr,boost::shared_ptr和等效阵列的容器.更简单,通常std::vector工作得很好,并且根本不需要任何指针使用.最后,您可以传递引用,而不是将指针传递给大型或可修改的数据结构.指针可以表示数组,而引用可以避免这种歧义.delete[]仅用于分配的数组,new ...[]仅delete用于指向单个对象的指针,free(...)仅用于通过C api分配的内存(例如malloc(..)).这些不能混淆; C++释放例程包括析构函数调用,因此需要正确调用.NULL.调试意外的空取消引用比不正确的内存访问更容易.释放NULL指针是可以的,因此您不需要使用检查来破坏析构函数以避免这种情况.如果你delete是一个过早的对象,你应该设置它的指针,NULL以避免双重删除相同的指针,并避免意外解除引用悬空指针.delete指向它之后,没有其他对象可以使用该对象. boost::shared_ptr是一个无障碍的相当低的开销容器,当你需要共享指针时通常很好.Fer*_*eak 12
最后但并非最不重要
永远不要使用指针,除非你必须...有(const)引用来避免传递给函数和STL容器的对象的复制构造以及其他存储要求的字符串,并且如果你真的需要指针则使用smart(boost :: shared_ptr)指针并且不想手动跟踪它们.