相关疑难解决方法(0)

1730
推荐指数
11
解决办法
54万
查看次数

223
推荐指数
4
解决办法
17万
查看次数

指针,智能指针或共享指针?

我正在使用普通指针编程,但我听说像Boost这样的库实现了智能指针.我还看到在Ogre3D渲染引擎中有一个深度使用共享指针.

三者之间究竟有什么区别,我应该坚持使用它们的类型吗?

c++ pointers

115
推荐指数
5
解决办法
11万
查看次数

我应该使用shared_ptr还是unique_ptr

我一直在使用pimpl成语制作一些对象,但我不确定是否使用std::shared_ptrstd::unique_ptr.

据我所知,std::unique_ptr是更有效的,但是这是没有这么多的问题,对我来说,因为这些物体是比较重量级反正做的成本std::shared_ptrstd::unique_ptr相对较小.

我目前std::shared_ptr只是因为额外的灵活性.例如,使用a std::shared_ptr允许我将这些对象存储在散列映射中以便快速访问,同时仍然能够将这些对象的副本返回给调用者(因为我相信任何迭代器或引用可能很快变得无效).

但是,这些对象确实没有被复制,因为更改会影响所有副本,所以我想知道也许使用std::shared_ptr和允许副本是某种反模式或坏事.

它是否正确?

c++ pimpl-idiom shared-ptr unique-ptr c++11

52
推荐指数
3
解决办法
2万
查看次数

智能指针.何时,何地以及如何?

首先,由于存在不同类型的智能指针,我想将这个问题集中在其中两个上:引用计入侵入式和非侵入式智能指针.针对每种指针类型单独询问该问题.

我不确定如何制定我的问题,所以这就是我不问的问题:我不是在问为什么或什么时候需要智能指针.我不应该使用哪种类型的智能指针.

这就是我所要求的,我希望它足够清楚:当处理"智能管理"对象时,我应该在哪些上下文中使用哪个指针语义?也就是说,智能指针语义,原始指针语义,别的东西(比如对智能指针的引用)?

显而易见的是,当我"存储"指向对象的指针(对象是引用计数的内存实体)时,例如全局指针,或者作为类成员,它应该是一个智能指针,因此它会声称所有权,但是其他情况怎么样?

当我将指针作为函数参数传递时,它应该是智能指针,原始指针,对智能指针的引用,还是其他什么?返回指针怎么样?本地指针?等......

当然,我可以在任何地方使用智能指针,这是最安全的选择,但我觉得这实际上是不必要的并增加了开销.

c++ smart-pointers

3
推荐指数
1
解决办法
1003
查看次数