草庐IT

intrusive_ptr

全部标签

c++ - 将 std::shared_ptr<char> 转换为 std::shared_ptr<unsigned char>

有什么好的方法可以将shared_ptr转换为shared_ptr吗?我想到了以下但它看起来不是很干净。intmain(intargc,char**argv){std::shared_ptrp1=std::make_shared();std::shared_ptrp2=std::shared_ptr(reinterpret_cast(p1.get()),[p1](unsignedchar*){});} 最佳答案 你正在做的事情有一个现成的功能,reinterpret_pointer_cast:std::shared_ptrp2=st

c++ - 多态 unique_ptr 复制省略

我有以下代码适用于Clang5.0,但不适用于启用了C++14的Clang3.8:classBase{};classDerived:publicBase{};std::unique_ptrMakeDerived(){autoderived=std::make_unique();returnderived;}intmain(){autobase=MakeDerived();std::coutLiveSampleHere在这种情况下,由于复制省略,返回值在技术上是移动构建的吗?如果是这样,这是否意味着unique_ptr的移动构造函数旨在支持用户类类型的隐式向上转换?从cppreferen

c++ - 为什么 Google Test/Mock 通过 std::unique_ptr 显示泄露的模拟对象错误?

假设有一个Bar对象,它使用了一个Foo对象。所有权是独占的,因此Bar在其构造函数中将Foo作为std::unique_ptr获取。我想用Google测试框架测试Bar,所以我编写了以下代码:usingnamespacetesting;classFoo{public:virtualintF()=0;};classBar{public:Bar(std::unique_ptr&&foo):m_foo(std::move(foo)){}intB(){returnm_foo->F();}private:std::unique_ptrm_foo;};classMockFoo:publicFoo

c++ - 这个 shared_ptr 是如何自动转换为原始指针的?

我现在正在学习C++11的enable_shared_from_this;一个例子让我感到困惑:shared_from_this()返回的shared_ptr类型如何转换为这个原始指针?#include#include#includestructBar{Bar(inta):a(a){}inta;};structFoo:publicstd::enable_shared_from_this{Foo(){std::coutgetBar(inta){std::shared_ptrpb(newBar{a},std::bind(&Foo::showInfo,shared_from_this(),s

c++ - GCC 发出用于 boost::shared_ptr 取消引用的额外代码

我有以下代码:#includestructFoo{inta;};staticintA;voidfunc_shared(constboost::shared_ptr&foo){A=foo->a;}voidfunc_raw(Foo*constfoo){A=foo->a;}我以为编译器会创建相同的代码,但对于shared_ptr版本,发出了一条额外的看似冗余的指令。Disassemblyofsection.text:00000000:0:55pushebp1:89e5movebp,esp3:8b4508moveax,DWORDPTR[ebp+8]6:5dpopebp7:8b00moveax,

c++ - 无法分配 tr1::shared_ptr

我有一个以tr1::shared_ptr作为成员的类,如下所示:classFoo{std::tr1::shared_ptrbsp;voidBar();}在成员函数Bar中,我尝试这样赋值:bsp=newTCODBsp(x,y,w,h);g++然后给我这个错误nomatchfor‘operator=’in‘((yarl::mapGen::MapGenerator*)this)->yarl::mapGen::MapGenerator::bsp=(operatornew(40u),(,((TCODBsp*))))’/usr/include/c++/4.4/tr1/shared_ptr.h:8

c++ - boost asio 和 shared_ptr 的扩散

我最近开始使用boost。到目前为止,大多数事情都非常简单。但是让我发疯的一件事是shared_ptr在整个boost过程中的扩散。即使在简单的示例中,也会使用shared_ptr。所以我的问题是,如果我使用boost来接受tcp连接然后处理它们。只要我保证在堆上创建的对象(boost::asio::ip::tcp::socket,以及将为异步方法回调的类)在我完成使用tcp之前不会被删除,那么我不需要shared_ptr对吗?我写了一个简单的tcp服务器和客户端,没有使用共享ptr,它可以工作。但我只是想要一些外部确认,以证明我的评估是正确的。此外,根据您的经验,您是否曾经需要使用s

使用 shared_ptr 到 const T 的 C++ 模板实例化

假设我有一个类templateclassA{public:templatevoidf(std::tr1::shared_ptr>v1,std::tr1::shared_ptr>v2){}};以下不编译:Aa;std::tr1::shared_ptr>v1(newstd::vector());std::tr1::shared_ptr>v2(newstd::vector());a.f(v1,v2);编译错误是:error:nomatchingfunctionforcallto'A,std::allocator>>::f(std::tr1::shared_ptr>>&,std::tr1::s

C++:直接使用函数返回 shared_ptr 的值是个坏主意吗?

例如:boost::shared_ptrtest(){boost::shared_ptrx(newint(3));returnx;}voidfunction(){inty=*test();...}使用shared_ptr来避免复制整个对象也是一个坏主意吗?例如矩阵/图像的vector。 最佳答案 在一般情况下,不会。您的示例复制了shared_ptr的内容,然后删除了原始值。现在,这里更大的问题是为int进行动态内存分配效率极低,但我假设您没有在实际代码中这样做。:) 关于C++:直接使

c++ - 在这种情况下 unique_ptr 的行为应该是什么?

假设我有以下内容:std::unique_ptrpA;pA(newA);在这个复杂的例子中,pA(newA);的行为应该是怎样的?是吗?据我所知,在MSVC2010中,voidoperator()(T*)const;在new之后立即调用fromdefault_delete立即返回并删除指针。而g++(4.7.0)给了我nomatchforcall(std::unique_ptr)(A*)错误。 最佳答案 代码不应编译。std::unique_ptr不会重载operator()。VisualC++2011DeveloperPrevie