草庐IT

C++智能指针之unique_ptr

全部标签

c++ - 为继承 enable_shared_from_this 的类获取 unique_ptr

通常我更喜欢从工厂返回unique_ptr。最近我遇到了为继承enable_shared_from_this的类返回unique_ptr的问题。此类的用户可能会意外调用shared_from_this(),尽管它不属于任何shared_ptr,这会导致std::bad_weak_ptr异常(或C++17之前的未定义行为,通常作为异常实现)。代码的简单版本:classFoo:publicenable_shared_from_this{stringname;Foo(conststring&_name):name(_name){}public:staticunique_ptrcreate(c

c++ - 指向 char 数组的整数指针

我正在开发一个应用程序(visualstudio上的C++语言),其中所有字符串都使用整数指针引用。例如,我正在使用的类有一个指向数据的整数指针和一个大小变量。{....unsignedshortint*pData;intiLen}我想知道使用int指针代替char指针有什么优势吗?经过深思熟虑,我怀疑原因可能是为了避免在没有空终止的情况下使用char指针可能发生的应用程序崩溃。但我不是100%确定。在调试过程中,我们如何检查指针的内容,其中内容是字符数组或字符串(在VisualStudio上)。调试时查看内容只能看到地址。因此,我在调试时遇到了困难。使用printf可以显示内容,但我

c++ - 如何在共享指针中为模板类使用前向声明(在 C++ 中)

我有一个基类Base在Base.h中定义:classBase{/*...*/};还有一个类模板Child源自Base,在Child.h中定义:#include"Base.h"templateclassChild:publicBase{/*...*/};现在我想在Base中创建一些工厂方法类,它应该返回一个std::shared_ptr到Child类(class)。为了避免循环依赖,我尝试使用前向声明。所以Base.h现在看起来像这样:classChild;//newforwarddeclarationclassBase{/*...*///newfactorymethodstaticst

【单片机毕业设计】【mcuclub-dz-204】基于物联网技术的智能家居自动控制系统设计

一、基本介绍项目名:基于物联网技术的智能家居自动控制系统设计项目名:光照控制(实物)项目编号:mcuclub-dz-204单片机类型:STM32F103C8T6具体功能:1、通过两个光敏电阻检测室内光照和室外光照2、当室外光照比较高,室内光照比较低时,自动打开窗帘(步进电机模拟)3、当室外光照比较低,室内光照比较低时,自动开灯(三极管控制灯)4、通过按键可设置室内、室外光照最小值,手动开关窗帘、开关灯、切换模式5、通过OLED显示室内外光照值、窗帘状态、灯状态、模式6、通过WIFI模块,可将所有监测数据发送到手机端,手机端设置室内、室外光照最小值,可控制开关窗帘、开关灯、切换模式二、资料总览实

c++ - 带有自定义删除器的 std::shared_ptr 的 Typedef 别名

我想为std::shared_ptr创建别名使用自定义删除器。此代码有效,但仅适用于唯一指针。我收到有关标有[1]的行的无效模板参数数量的错误。我注意到std::unique_ptr的模板和ctor参数和std::shared_ptr与所列不同here和here我注意到这个问题可能与this重复,但我不知道如何解决我的问题#include#includetemplatestructDeleter{voidoperator()(T*p)constnoexcept{p->Drop();//SFINAE};};templateusingmy_unique_ptr=std::unique_pt

c++ - 将任意类的成员函数指针存储为类实例变量

SO上有几个问题解决了将函数指针作为参数/实参传递的问题(here、here、here等)。其实我问了一个relatedquestion另一天。但是,这个问题有点不同。我的问题是我正在编写一个非常灵活的类。我现在拥有的适用于非成员函数。下面贴出来templateclassMyClass{private:typedefdouble(*firstFunctionPtr)(constT&var);typedefbool(*secondFunctionPtr)(constT&var);//FunctionpointersasmembervariablesfirstFunctionPtr_fir

c++ - 未定义对 clang 中函数指针的变量模板的引用,但不是 gcc

#includestaticconstexprboolisSSE2=true;templatestaticvoid(*fp)();templatestaticvoidfoo_c(){std::coutstaticvoidfoo_sse2(){std::cout=foo_sse2;elsefp=foo_c;fp();return0;}我有一个使用变量模板的项目,它本身就是一个指向函数的指针。上面的示例代码在GCC6.3中编译和执行良好,但在clang3.9.1中给出警告和错误。$clang++"Source.cpp"-o"foo.exe"-std=c++14-O2Source.cpp:6

c++ - 当指针运算用作 C++ 中函数的参数时会发生什么?

我正在学习介绍性的c++类(class),我们正在学习如何实现归并排序。我正在尝试逐步完成代码中的每一步,但有一点让我感到困惑:1.voidmergeSort(int*x,intlen){2.if(len>1){3.intnewLen=len/2;4.mergeSort(x,newLen);5.mergeSort(x+newLen,len-newLen);6.int*newSeq;7.newSeq=newint[len];8.mTwoSeq(x,x+newLen,newSeq,newLen,len-newLen);9.for(inti=0;i第5行发生了什么?据我了解,当我们调用“x+

SIMPL:用于自动驾驶的简单高效的多智能体运动预测基准

本文经自动驾驶之心公众号授权转载,转载请联系出处。原标题:SIMPL:ASimpleandEfficientMulti-agentMotionPredictionBaselineforAutonomousDriving论文链接:https://arxiv.org/pdf/2402.02519.pdf代码链接:https://github.com/HKUST-Aerial-Robotics/SIMPL作者单位:香港科技大学大疆论文思路:本文提出了一种用于自动驾驶车辆的简单高效的运动预测基线(SIMPL)。与传统的以代理为中心(agent-centric)的方法(精度高但需要重复计算)和以场景为中

c++ - 我的 g++ 使用 vector<weak_ptr> erase() 方法生成奇怪的警告

我有以下C++代码:#include#include#include#includevoiderase_from_vector(std::vector>&mvec){for(automvec_it=mvec.begin();mvec_it!=mvec.end();)mvec_it=mvec.erase(mvec_it);}intmain(void){#if0std::vector>mvec;for(automvec_it=mvec.begin();mvec_it!=mvec.end();)mvec_it=mvec.erase(mvec_it);#endif}当我这样编译时,GCC会生成