【发布时间】:2020-08-28 19:54:48
【问题描述】:
我是 C++ 新手。我已经习惯了指针和内存分配,但我心中仍有一些疑问。当我们更喜欢引用而不是指针时,有什么技术区别吗?我脑海中的另一个问题是指针和程序性能之间是否存在任何关系。让我解释一下,我知道使用指针意味着分配堆,但是使用它们可能会提高我的程序的性能?
【问题讨论】:
-
指针和引用之间的差异主要是语义上的,由编译器在编译时处理。它们倾向于以类似的方式实现。如果我们将指针视为对对象的间接访问,则指针实际上可以降低性能,其中需要两次内存访问才能从对象或所有成员函数中获取值:指针的一次内存访问, 一个用于对象。
-
话虽如此,在现代 C++ 中,通常很少需要在多态性之外使用指针。专注于编写好的、可读的和可维护的代码,这些代码工作得很好。然后如果有一些效率要求,构建一个优化的发布版本,并测量性能,并profile程序找到前两个(或可能三个)瓶颈,以及只专注于那些,并编写大量文档和 cmet,以了解您所做的代码的任何手动优化。重复直到它“足够好”,但不要再进一步了。
-
“我知道使用指针意味着分配堆”这是一个常见的误解,这是错误的。您可以在每个地方都使用指针,而无需进行单个动态内存分配。反过来也不完全正确。标准容器以您无需处理指针的方式为您管理动态分配的内存。自 C++11 以来的最新版本,无论如何您都不应该处理原始的拥有指针
标签: c++ pointers reference stack heap-memory