c++ - 图结构——指针不好吗?

标签 c++ pointers

我正在用 C++ 实现寻路算法的图形结构。

当一条新的边或节点被创建时,它被存储在一个单独的 vector 中,以供以后由图类的析构函数删除。我使用指针是因为它们提供了简单的图形导航;我可以通过简单地比较它们的地址来轻松地测试节点的身份,或者我可以通过创建指针 vector 来创建路径,然后直接使用这些指针在图中导航。

struct Edge
{
    Node* from;
    Node* to;
}

struct Node
{
    Data data;

    std::vector<Edge*> outEdges;
    std::vector<Edge*> inEdges;
}

我读过关于指针如何不好并且应该避免或用智能指针替换(但即使是它们也应该避免)的文章。或者优秀的程序员根本不使用它们(有异常(exception))。我知道它们是内存泄漏、安全风险和整体难以正确管理的根源(尤其是在多线程应用程序中)。

我的问题:在这种情况下指针方法不好吗?

编辑 1: 有一些问题我在哪里读到关于指针(智能)应该避免。 https://softwareengineering.stackexchange.com/questions/56935/why-are-pointers-not-recommended-when-coding-with-c/163279#163279

在他回答的第二部分:

  • “C++ 中大多数指针的使用都是不必要的。”
  • “...现代 C++ 习语通常根本不需要指针...”
  • “对于了解现代 C++ 的人来说,很明显您很少需要任何指针(智能指针或原始指针;除非将它们用作迭代器)。”

最佳答案

我要重复一遍。指针还不错。用友好的黄色字母 (C) 打印并别在墙上。它们非常有用。我从来没有见过一个专业的 C++ 程序能够完全避免指针。

管理您自己的指针通常是不好的,除非您正在使用指针管理器。

不受约束的标准内存分配可能是高性能应用程序中的瓶颈 - 但指针不是标准内存分配的同义词。

指针不是内存泄漏或安全风险的来源。指针并不难管理(通常不比编写好的程序难)。

如果您不想使用指针,则说明您选择了错误的语言。

关于c++ - 图结构——指针不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33157539/

相关文章:

c++ - "thrift -gen cpp"生成的代码无法在 macOS : 'boost/tr1/functional.hpp' file not found 上编译

c++ - 调用由指针非静态初始化的类方法

c - 常量char指针是指向常量char的指针还是指向char的常量指针?

c++ - 指针访问运算符 -> 如何工作?

c++ - 尽管缺少空终止符,为什么指向 char 的 C++ 指针仍充当字符串?

c++ - c++中获取路由表的可移植方式

c++ - 创建相同字符的多维数组的最有效方法? [C++]

c++ - 有没有更好的方法来终止 Windows 上的 chrome.exe

c++ - 直接从已安装的 Windows 光栅(位图)字体获取位图

c++ - "possibly-hypothetical"在指针算术规则中意味着什么?