草庐IT

C++智能指针之unique_ptr

全部标签

使用 unique_ptr 包含 char 数组的 C++ 对象

我正在寻找一种方法来使用unique_ptr来分配一个结构,该结构包含一个char数组,其中包含动态设置的字节数以支持不同类型的消息。假设:structMyMessage{uint32_tid;uint32_tdata_size;chardata[4];};如何将下面的send_message()转换为使用智能指针?voidsend_message(void*data,constsize_tdata_size){constautomessage_size=sizeof(MyMessage)-4+data_size;constautomsg=reinterpret_cast(newcha

c++ - 在析构函数 C++ 中删除指针

我正在使用图书馆的类(class)。设A,它有一个字符指针“token”我的代码:voidsomeFunction(){Aa;cout[1]为什么会失效:A类如下:classA{char*token;public:A(){token=GetRandomToken();//GetRandomTokenwillreturna'newChar'array}~A(){if(token!=NULL){delete[]token;//itisA'sresponsibilitytodeletethememoryitcreatedtoken=NULL;}}};在anotherFunction中调用co

c++ - unique_ptr 作为模板参数

为什么要在VS2017中编译?#include#includeusingnamespacestd;structx{x(){coutvoidfoo(T&&item){structboo{Titem;boo(T&&t):item(std::move(t)){}};newboo(std::move(item));}intmain(){std::unique_ptrb(newx);foo(b);//IwouldexpectthatIshouldputstd::move(b)here.}按照编写的代码,输出是x()~x()如果foo(b)行写为foo(std::move(b)),那么输出就是x(

c++ - 处理数组时 make_unique 和 make_shared 之间的区别

从C++17开始,您可以使用make_unique为了创建指向数组的智能指针,例如:unique_ptrptr=make_unique(10);这将创建一个指向10个元素数组的智能指针(将调用适当的deleter[]的事实也很棒)。但是根据thismake_shared不支持此类功能(至少在C++17中不支持,据我所知):shared_ptrptr=make_shared(10);上面的代码显然是非法的。事实上,我的VisualStudio2017(v141)吐出以下错误:C2070:'int[]':illegalsizeofoperand'有趣的是shared_ptr本身确实支持数组

C++ 适当的指针成员初始化

我是C++新手,有Java背景。我有一个类原型(prototype),它设置了两个私有(private)指针对象成员。classDriveController:Controller{public:DriveController(int8_tportTL_,int8_tportTR_,int8_tportBL_,int8_tportBR_,doublewheelSize_,doublebaseSize_);private://Internalchassiscontrollerokapi::ChassisControllerIntegrated*chassisController;okap

c++ - [[nodiscard]] 到一个函数指针

我想使用第三方函数,它通过充满函数指针的结构提供其API。例如:structS{usingp_func1=int(*)(int,int);p_func1func1;usingp_func2=int(*)(char*);p_func2func2;}第三方库初始化这个结构。需要检查这些函数(func1、func2)的返回值,我希望我能以某种方式显示在[[discard]]属性上以确保检查返回值。有没有办法做到这一点,同时保持结构的ABI?编辑:到目前为止,我能想到的最好的办法就是拥有另一个结构,如下所示:structS_wrap{Sorig;[[nodiscard]]intfunc1(in

c++ - 使用非捕获 lambda 作为可变参数模板函数的函数指针参数给出 "no matching function call"

我目前正在尝试为ecs编写“foreachwith”。templatevoidforeach(void(*func)(Entitye,T...args)){std::vectorintersection;//...Findallentitieswithallthetypesfor(size_ti=0;i(intersection[i])...);}它与函数参数配合得很好voidfoo(Entitye,inti){setComp(e,(int)e);}foreach(foo);//Worksasexpected但不能像lambda那样复制和粘贴相同的函数foreach(//eveniff

c++ - 为什么 unique_ptr 不阻止自定义删除器的切片?

std::unique_ptr与自定义删除器的行为基于删除器的静态类型.没有多态性,没有基于运行时传递的实际删除器的运行时行为,因为提供的派生删除器被切片为声明的删除器的静态类型。(Itisdesignedthiswayinpurpose,toallowthesizeofunique_ptrwithdefaultdeleterorwithcustomdeleterwithoutanydatamembers,tohavesamesizeasarawpointer).带有自定义删除器的unique_ptr的静态行为:classA{};structBaseDeleter{virtualvoi

.NET应用国际化-AIGC智能翻译+代码生成

🏆作者:科技、互联网行业优质创作者🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!.NET应用国际化-AIGC智能翻译+代码生成的议题,今天整理成博客,分享给所有人。随着疫情的消退,越来越多的企业开始向海外拓展,应用系统的国际化和本地化是一个巨大的技术挑战,我们今天重点探讨以下内容:.NET应用如何实现国际化?不仅仅包含资源文件和文本的替换,还有文本词条抽取、智能翻译、代码替换、本地化处理等各种场景。基于

高阶非线性核在人工智能伦理中的讨论

1.背景介绍人工智能(ArtificialIntelligence,AI)是一门研究如何让机器具有智能行为的科学。在过去的几十年里,人工智能研究已经取得了显著的进展,特别是在机器学习(MachineLearning,ML)和深度学习(DeepLearning,DL)方面。这些方法已经被广泛应用于各种领域,包括图像识别、自然语言处理、语音识别、游戏等。然而,随着人工智能技术的发展,我们也面临着一系列道德、法律和社会问题。这些问题涉及到人工智能系统的透明度、可解释性、隐私保护、数据安全、偏见和歧视等方面。为了解决这些问题,我们需要开发一种新的人工智能伦理框架,以确保技术的可持续发展和社会责任。在这