既然智能指针已经存在,那么使用C型指针是不是已经过时了

Now that smart pointers exist, is it deprecated style to use C type pointers?

本文关键字:指针 是不是 过时 智能 存在      更新时间:2023-10-16

可能重复:
何时使用哪种指针?

有很多专业人士支持C++11的智能指针:它们更安全,功能更强大,范围更明显等等。

"经典"类C指针是吗

class C{};
C c;
C* c_p = &c;

现在过时了?它们甚至被弃用了吗?或者是否存在C指针仍然有意义的用例?

编辑:带有智能指针的代码片段:

class C{};
C c;
std::shared_ptr<C> c_p(new C());

编辑:感谢您指出重复内容。Xeo的回答是:

使用哑指针(原始指针)或对资源的非拥有引用的引用,当>时,您知道资源将比引用对象/范围更长寿。当您需要可为null或可重置性时,首选引用和>使用原始指针。

如果只有这些,我承认这个问题已经结束了。

在一些用例中,原始指针是有意义的。

现代代码中的原始指针是"非拥有"指针。这意味着代码不应该做任何需要或获取指向对象所有权的事情。例如,它不应该是deleted,用于构造拥有的智能指针,或者保存在当前上下文之外。

绝对不是。智能指针用于特殊情况,而不是一般用途。根据应用程序和编程风格指针仍然是原始指针;事实上,在某些情况下根本不是聪明的指针。

不,原始指针不是过时的。除非必要,否则通常不鼓励使用它们。更不鼓励通过原始指针维护对象的所有权,因为您必须记住delete它,这在存在异常的情况下可能很难做到。

原始指针比智能指针更有效率,因此在代码的某些性能敏感部分使用它们是有意义的。在一些领域,如线性代数,指针算术可能很有用,你可以在那里使用原始指针[1],或者在原始指针之上构建新的抽象,可能与智能指针相结合,而不是只使用智能指针。

[1] 例如用于定义子矩阵的视图