6

可能重复:
我什么时候使用哪种指针?

有许多赞成 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 那里的回答:

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

如果仅此而已,我接受这个问题已经结束。

4

3 回答 3

13

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

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

于 2012-07-23T06:43:38.277 回答
9

绝对不。智能指针用于特殊情况,不用于一般用途。根据应用程序和编程风格,大多数指针仍然是原始指针;实际上,在某些情况下,可能根本没有智能指针。

于 2012-07-23T07:34:52.043 回答
4

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

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

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

于 2012-07-23T06:44:47.260 回答