c++ - 为什么shared_ptr有一个显式的构造函数

c++ - 为什么shared_ptr有一个显式的构造函数

我想知道为什么shared_ptr没有隐式的构造函数。 事实并非如此: 为此获取boost:: shared_ptr(我找出原因,但认为这将是一个有趣的问题,无论如何发布。)#include<boost/shared_ptr.hpp>#include<iostream> using namespace boost; using namespace std; void fun(s…


C++-将引用传递给std:: shared_ptr或boost:: shared_ptr

如果我有一个需要使用shared_ptr的函数,将它的引用传递给它会不会更高效(所以为了避免复制shared_ptr对象)? 什么是可能的不良副作用? 我设想了两种可能的情况: 1)函数内部的副本由参数组成,如in ClassA::take_copy_of_sp(boost::shared_ptr<foo> &sp){... m_sp_member=sp;…


c++ - 在库的公共接口中使用boost:: shared_ptr

我们有一个C++库,我们提供给几个不同的客户端。 最近,我们在公共接口中使用原始指针来切换使用boost:: sharedptr。 正如你所猜测的,这提供了巨大的好处,因为现在客户不再需要担心谁需要删除什么和什么时候删除。 当我们做出这个决定的时候,我相信这是正确的做法,但是让我困扰的是,我们不得不在第三方库中加入一些东西,通常情况下,如果可以的话,就避免这种情况。 我合理的认为,提升实际上…


c++ - 智能指针+“这个”被认为是有害的?

在使用智能指针(如boost::shared_ptr的C++项目中,使用“ this ”的设计理念是什么? 考虑到: 存储任何智能指针中包含的原始指针供以后使用是很危险的。 你已经放弃了对象删除的控制,并相信智能指针在正确的时间做到这一点。 非静态类成员本质上使用this指针。 这是一个原始指针,不能改变。 如果我将它存储在另一个变量中,或者将它传递给另一个可能存储它的函数,或者将它绑定…


c++ - 从shared_ptr获得正常的ptr?

我有类似shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))我现在需要调用需要指向Type的指针的C样式函数。 我如何从shared_ptr获取它?…



c++ - boost shared_ptr<XXX>线程安全吗?

我有一个关于boost::shared_ptr<T> 。 有很多线程。 using namespace boost; class CResource{// xxxxxx}class CResourceBase{public: void SetResource(shared_ptr<CResource> res){m_Res=res;}…


c++ - 使用boost:: shared_ptr时有什么潜在的危险?

使用boost::shared_ptr时,你有什么方法可以用脚射击自己? 换句话说,当我使用boost::shared_ptr时,我必须避免哪些陷阱?…


c++ - 我怎么知道谁拥有shared_ptr<>?

我在C++的应用程序中使用boost:: shared_ptr。 内存问题真的很严重,应用程序需要大量的内存。 但是,因为我将每个新对象放入shared_ptr中,所以当应用程序退出时,不会检测到内存泄漏。 必须有一些像std::vector<shared_ptr<>>池的资源。 如何在调试时知道谁拥有shared_ptr? 一行一行地检查代码是很困难的。 太多的代码... 非常感谢…


c++ - boost make_shared接受一个const引用。 有办法解决这个问题吗?

我在我的程序中使用boost共享指针,我有一个类作为参数引用另一个对象。 我遇到的问题是make_shared函数要求所有参数都是一个const引用,如果我的类的构造函数不允许传入const引用参数,我会得到编译错误。 有谁知道这背后的原因? 另外,有什么办法可以解决这个问题吗? 什么给我带来问题的代码示例: class Object{public: Object(int&…


c++ - boost的shared_ptr(shared_ptr<Y> const&r,T*p)用于什么?

boost::shared_ptr有一个不寻常的构造函数 template<class Y> shared_ptr(shared_ptr<Y> const & r, T*p); 我对这对什么有用感到有些疑惑。 基本上它与r共享所有权,但.get()将返回p 。 不是 r.get() ! 这意味着您可以执行以下操作: int main(){boost::shared_ptr<…




shared_ptr reset std get shared_ptr头文件 make_shared shared_ptr初始化 shared_ptr赋值 boost shared_ptr数组