gpt4 book ai didi

c++ - 使用指针时的注意事项

转载 作者:可可西里 更新时间:2023-11-01 18:01:16 25 4
gpt4 key购买 nike

这是一个简单但重要的问题。在 C 和 C++ 中使用指针以确保在 AIX 上避免 SEGMENTATION FAULT 时该做什么和不该做什么?

哪里 char * 优于字符数组?

最佳答案

特定于 C++

  • 避免手动管理内存,而是使用 RAII 容器,例如 std::auto_ptrboost::scoped_ptrboost: :shared_ptr 和等效的数组容器。更简单的是,通常 std::vector 工作得很好,而且根本不需要使用任何指针。最后,您可以传递引用,而不是传递指向大型或可修改数据结构的指针。指针可以表示数组,而引用可以避免这种歧义。
  • 索引数组是大多数指针算法的不错替代品。它通常不比指针算法慢,指针算法通常更容易出错并且更难阅读和维护。通常,不要以可读性为代价进行微优化。
  • 调用正确的释放例程: delete[] 仅适用于通过 new ...[] 分配的数组,delete 仅适用于指向单个对象的指针,free(...) 仅适用于通过 C api(例如 malloc(..))分配的内存。这些不能混淆; C++ 释放例程包括析构函数调用,因此需要正确调用。
  • 显式初始化并将无意义的指针设置为 NULL调试意外的 null 取消引用比调试不正确的内存访问更容易。取消分配 NULL 指针是可以的,因此您不需要通过检查来使析构函数变得困惑来避免这种情况。如果您过早地删除一个对象,您应该将它的指针设置为NULL,以避免重复删除同一个指针,并避免意外取消引用悬空指针。
  • 如果您正在使用 C++ 继承并且正在覆盖析构函数,请阅读虚拟析构函数;这些是正确性所必需的(简而言之,基类必须明确地将析构函数标记为虚拟)。
  • 如果您必须手动管理内存,请注意谁“拥有”指针。只有所有者才能释放指针指向的对象或数组,在所有者删除指向它的指针后,任何其他对象都不能使用该对象。 boost::shared_ptr 是一个无障碍且开销相当低的容器,当您确实需要共享一个指针时,它通常很好。

关于c++ - 使用指针时的注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1721862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com