在 Java 中,引用是垃圾收集的“智能指针”。
C++ 还使用了智能指针的概念,它在<memory>
库中称为unique_ptr
和shared_ptr
。shared_ptr 是引用计数的,因此可以以与 Java 引用相同的方式使用。unique_ptr 类似,除了不可复制且更轻量级。两者的好处是永远不需要使用delete关键字,并且能够依赖受异常保护的“指针”。
C++ 还支持引用的概念——这通常是传递对象的好选择(更好的是引用到const)。C++ 中的引用绑定到传递的对象类型,因此您需要&
在函数签名中指定(使用引用符号)
#include <string>
void foo(std::string& bar)
{
bar = "world";
}
void foo2(const std::string& bar)
{
//passed by reference, but not modifyable.
}
int main()
{
std::string str = "hello";
foo(str);
foo2(str);
}
至于“原始”指针——您几乎总是可以通过使用智能指针、引用、迭代器或按值传递来避免它们。简单的普通指针带有一个混合包,C++ 从 C 语言继承而来的“陷阱”——如果你有一个相当新的编译器,你根本不需要使用它们(除非你要做类似的事情重新发明轮子以用于内存管理、数据结构等的学习目的)