草庐IT

understanding-weak-references

全部标签

c++ - 如何为 lambda 创建 'reference'?

我想捕获对lambda的“引用”,我认为函数指针可以解决问题,如下所示:int(*factorial)(int)=[&](intx){return(x但我得到cannotconvertfrommain::lambdatoint(_cdecl*)(int).那么指向lambda的正确方法是什么? 最佳答案 由于lambda不是无状态的,因此不能将其转换为函数指针。请改用std::function。std::functionfactorial=[&](intx){return(x 关于c++

c++ - 即使正确使用 make_shared,shared_from_this() 也会导致 std::bad_weak_ptr

我正在使用独立的Asio和C++11创建一个C++服务器应用程序,但遇到错误,这就是我寻求帮助的原因。错误在类里面worker_thread,在通话期间shared_from_this(),一个bad_weak_ptr引发异常,导致程序崩溃。布局类(class)connection_manager创建并存储std::shared_ptr类型的对象在std::vector里面容器类(class)worker_thread继承自std::enable_shared_from_this.类(class)worker_thread创建std::shared_ptr类型的对象.类(class)c

C++ weak_ptr创建性能

我已经读到创建或复制std::shared_ptr会涉及一些开销(引用计数器的原子增量等)。但是如何从中创建std::weak_ptr呢?Obj*obj=newObj();//fastObj*o=obj;//slowstd::shared_ptra(o);//slowstd::shared_ptrb(a);//slow?std::weak_ptrc(b);我希望能够获得更快的性能,但是我知道共享指针仍然必须增加弱引用计数器。那么,这仍然像将shared_ptr复制到另一个一样慢吗? 最佳答案 除了Alec's非常有趣的描述他以前的项

c++ - 是否可以将编译时 "reference"赋给变量?

考虑以下代码:Matrix4x4perspective(constViewFrustum&frustum){floatl=frustum.l;floatr=frustum.r;floatb=frustum.b;floatt=frustum.t;floatn=frustum.n;floatf=frustum.f;return{{2*n/(r-l),0,(r+l)/(r-l),0},{0,2*n/(t-b),(t+b)/(t-b),0},{0,0,-((f+n)/(f-n)),-(2*n*f/(f-n))},{0,0,-1,0}};}为了提高构建矩阵的可读性,我必须从平截头体结构中复制值,

Vitis HLS出现undefined reference to的可能解决办法

问题描述:undefinedreferenceto`cv::namedWindow(std::__cxx11::basic_string,std::allocator>const&,int)'undefinedreferenceto`cv::resizeWindow(std::__cxx11::basic_string,std::allocator>const&,int,int)'undefinedreferenceto`cv::imshow(std::__cxx11::basic_string,std::allocator>const&,cv::_InputArrayconst&)'unde

c++ - 标准::原子 | compare_exchange_weak 与 compare_exchange_strong

我不确定是我不理解还是文档没有明确制定。以下摘自最新草案(N3126,第29.6节):boolatomic_compare_exchange_weak(volatileA*object,C*expected,Cdesired);boolatomic_compare_exchange_weak(A*object,C*expected,Cdesired);boolatomic_compare_exchange_strong(volatileA*object,C*expected,Cdesired);boolatomic_compare_exchange_strong(A*object,C*

C++ 对 WinMain@16 的 undefined reference (Code::Blocks)

我正在使用Code::Blocks学习C++,每次我尝试创建一个新类时,我都会收到一条错误消息:undefinedreferenceto`WinMain@16'这是我一直在使用的代码:主类#include"Lime.h"#includeusingnamespacestd;intmain(){Limelime;return0;}青柠类(.ccp):#include"Lime.h"#includeusingnamespacestd;Lime::Lime(){cout石灰header(.h):#ifndefLIME_H#defineLIME_HclassLime{public:Lime();

c++ - 提升.Python : Getting a python weak reference to a wrapped C++ object

我已经使用Boost.Python包装了一个C++类。这些对象在C++端具有强引用(boost::shared_ptr),并且在Python中也可能存在断断续续的强引用。到目前为止,一切正常。但是,如果我从其中一个强引用创建一个python弱引用,那么一旦最后一个python强引用消失,这个弱引用就会被删除。我希望弱引用一直存在,直到C++端的最后一个强引用也消失为止。有可能实现吗?换句话说:有没有办法从python中找出特定的C++对象(由Boost.Python包装)是否仍然存在? 最佳答案 您如何持有对包装类的“C++强引用”

c++ - 非类型模板参数 : how to pass reference to base class object?

似乎无法传递对的引用派生对象的基类对象作为模板参数,正如我在这里尝试做的那样:structa{int_v;constexpra():_v(0){}constexpra(intv):_v(v){}};structc:publica{constexprc():a(){}constexprc(intv):a(v){}};externconstcdefault_a;constexprconstcdefault_a{1};consta&c_as_a=default_a;//^--thisline(16)causesnoerror-ccanbeconvertedtoatemplatestructb

c++ - 我的 API 函数应该采用 shared_ptr 还是 weak_ptr

我目前正在设计一个API,我不确定我的函数是否应该采用shared_ptr或weak_ptr.有包含查看器的小部件。观众有一个功能add_painter这给观众增加了一个画家。当查看器需要重新绘制时,它会使用其绘制器绘制到缓冲区中并显示结果。我得出的结论是观众应该使用weak_ptr捕获画家:一个画家可能被多个观众使用,所以观众不能拥有画家。删除画家应该将其从查看器中删除。这样,用户就不需要记住他们必须调用remove_painter。功能。可能有不同类型的查看器,因此它们隐藏在界面后面。什么签名最适合add_painter界面中的功能?我应该直接使用voidadd_painter(w