既然存在智能指针,那么使用C类型指针的方式是否已弃用?

ste*_*fen 6 c++ smart-pointers c++11

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

有许多专业人士赞成C++ 11的智能指针:它们更安全,功能更强,范围更明显等.

"经典"C是否像指针一样

class C{};
C c;
C* c_p = &c;
Run Code Online (Sandbox Code Playgroud)

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

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

class C{};
C c;
std::shared_ptr<C> c_p(new C());
Run Code Online (Sandbox Code Playgroud)

编辑:感谢您指出副本.从Xeo的回答:

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

如果这就是全部,我接受这个问题已被关闭.

bam*_*s53 13

有一些用例,原始指针是有意义的.

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

  • @steffen你没有得到答案还是这个笑话?他不是建议你不要用原始指针做某些事情,他建议你在某些情况下使用**原始指针,即当你不做某些与指向对象有关的东西时. (2认同)

Jam*_*nze 9

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

  • 我谨表示不同意。对于需要询问的人来说,大多数指针可能必须是智能指针。(剩下的几个可以被认为是随机访问迭代器。) (2认同)
  • 如果有人需要问,那么标准智能指针只会导致更多问题.实际上,在大多数应用程序中,_most_指针用于导航,不应该是智能指针.它们不能是`unique_ptr`,因为会有很多指向同一个对象的指针,它们不能是`shared_ptr`,因为会有循环.大多数对象的生命周期由应用程序决定; 否则,它们可能不应该动态分配开始.这意味着无论如何智能指针都不会做正确的事情. (2认同)