c++ - 使用智能指针作为编程标准?

标签 c++ visual-c++ pointers smart-pointers

我越来越多地听到,我应该使用智能指针而不是裸指针,尽管我已经实现了有效的内存泄漏系统。

请问使用智能指针正确的编程方法是什么?即使我检查分配的内存块上的内存泄漏,是否真的应该使用它们?这还取决于我吗?如果我不使用它们,这是否可以被视为编程弱点?

如果强烈推荐智能指针(例如:std::auto_ptr),我应该使用它们而不是每个裸指针吗?

最佳答案

您应该使用 RAII 来处理所有资源分配。

智能指针只是该规则的一种常见特例。

智能指针不仅仅是shared_ptr。存在具有不同所有权语义的不同智能指针。使用适合您需求的那一款。 (主要有scoped_ptrshared_ptrweak_ptrauto_ptr/unique_ptr(更喜欢后者(如果可用)。根据您的编译器,它们可能在标准库中可用,作为 TR1 的一部分,或者根本不可用,在这种情况下,您可以通过 Boost 库获取它们。

是的,您绝对应该使用这些。它不会花费您任何成本(如果操作正确,您会损失零性能),并且会为您带来很多好处(内存和其他资源会自动释放,您不必记住手动处理它,并且使用资源的代码得到更短更简洁)

请注意,并非每个指针使用都代表某种资源所有权,因此并非所有原始指针使用都是错误的。如果您只需要指向其他人拥有的对象,那么原始指针非常适合。但是如果拥有该对象,那么您应该获得它的适当所有权,或者通过为类本身提供 RAII 语义,或者通过将其包装在智能指针中。

关于c++ - 使用智能指针作为编程标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142142/

相关文章:

c - 从 char 指针检索最后一组输入值

c++ - cpp中的构造函数无限循环

c++ - 如何强制 GNU make 重新编译在具有不同 FLAGS 的两个目标中使用的相同目标文件

c++ - 使用 getch() 保持命令提示符打开 Visual C++ 2010

c++ - 将 DLL 与 Visual C++ 链接

c++ - CMake:如何将每个资源编译器警告视为错误并抑制特定警告?

c++ - 删除链接列表中找到的所有特定键

c++ - 对 std::cout 的引用导致段错误

c++ - MLT 框架 windows build melt 加载 avformat 失败

c - 多维数组,不同方式表示grid[22][0]的地址