草庐IT

logically_deleted_y

全部标签

c++ - 什么时候调用 __cxa_deleted_virtual

我尝试为avrc++构建构建一个小测试用例集。通常从c++库中提供一些“异常函数”。现在我想编写一个测试程序来生成必须链接到__cxa_deleted_virtual的错误代码。任何人都可以提供导致链接到该函数的代码片段吗?我实际上不知道如何生成这个“有问题”的代码。 最佳答案 用于填充已定义为已删除的虚函数的虚表槽:structB{virtualvoidf()=delete;};structD:B{virtualvoidf()=delete;};(被删除的虚函数包含在vtable中的原因是thisallowsittobelater

c++ - delete[] 是否在调用析构函数后一次性释放内存?

据我所知,当我们在由相应的new[]创建的指针上写入delete[]时,程序将在数组中查找记帐信息并找出数组的元素大小(一个计数器)。然后程序对它们中的每一个调用元素的析构函数。最后,内存(什么内存??)由名为operatordelete的函数释放。我想问的是delete[]是否会在一次中释放由new[]表达式分配的整个内存因为该信息(总内存量)在所有元素都被销毁后可用,还是它会成功释放调用析构函数的数组元素占用的内存?相关后续问题被问到Doesdelete(nonarrayform)knowthetotalamountofmemoryallocatedbyeithernewornew

c++ - 使用 C++11 智能指针时,你能忘记 Checked-Delete 吗?

我读过unique_ptrwithincompletetypes关于CheckedDelete.但是,在使用智能指针或至少是C++11智能指针的一个子集时,checked-delete是否过时了?采用以下代码:classA;classB{public:std::auto_ptrautoPtr;std::unique_ptruniquePtr;std::shared_ptrsharedPtr;A*rawPtr;B();~B(){deleterawPtr;}};classA{public:~A(){std::cout(newA());uniquePtr=std::unique_ptr(ne

c++ - 第三方库不调用全局重载delete[]

我正在尝试了解C++中的内存池以获得更好的速度和调试能力。我一直在遵循此处找到的方法:http://oroboro.com/overloading-operator-new/.所以我重载了new、new[]、delete和delete[],如下所示:inlinevoid*operatornew(size_tsize){returnmyAlloc(size);}inlinevoid*operatornew[](size_tsize){returnmyAlloc(size);}inlinevoidoperatordelete(void*ptr){myFree(ptr);}inlinevoi

c++ - 在没有 Malloc/New 或 Free/Delete 的情况下管理连续的内存块

如果没有C++中其他内存管理器(例如Malloc/New)的帮助,如何创建自定义MemoryManager来管理给定的连续内存块?这里有更多的上下文:MemManager::MemManager(void*memory,unsignedchartotalsize){Memory=memory;MemSize=totalsize;}我需要能够使用MemManager分配和释放此连续内存块。构造函数被赋予block的总大小(以字节为单位)。分配函数应以字节为单位获取所需的内存量,并返回指向该内存块开头的指针。如果没有内存剩余,则返回NULL指针。Deallocate函数应接收指向必须释放的

c++ - C2280 : attempting to reference a deleted function (union, 结构体,复制构造函数)

当我尝试在VisualStudio2015中编译以下最小示例时,我遇到了误导性错误消息的问题:classVector{floatx;floaty;public:Vector(floatx,floaty):x(x),y(y){}Vector&operator=(constVector&v){x=v.x;y=v.y;return*this;}//Vector(Vector&&)=default;};classRect{public:union{struct{Vectorp1,p2;};struct{floatp1x,p1y,p2x,p2y;};};Rect():p1(0,0),p2(0,0

c++ - 在基类中重载运算符 delete

来自C++标准(ISO/IEC14882:2003(E)),§12.5.4,关于重载operatordelete:Ifadelete-expressionbeginswithaunary::operator,thedeallocationfunction'snameislookedupinglobalscope.Otherwise,ifthedelete-expressionisusedtodeallocateaclassobjectwhosestatictypehasavirtualdestructor,thedeallocationfunctionistheonefoundbyth

c++ - new/malloc 或 delete/free 是否占用或使缓存行无效?

我对缓存行为很好奇。下面是一些与缓存相关的问题:写操作是否将数据带入缓存?考虑像A[i]=B[i]这样的赋值,A[i]会被加载到缓存中吗?因为我只是将一些东西写入A[i]而不是读取它的值。分配大内存时,内存可能来自操作系统。出于安全原因,操作系统会将数据初始化为零(Reference)。如果赋值会把数据带入缓存(问题1),这种机制会占用缓存吗?假设有一个已分配的数组B,并且整个B现在都在缓存中。释放数组B后,B占用的缓存行是否会立即失效(可用)?有人可以给我提示吗? 最佳答案 从这里https://people.freebsd.or

C++ 零规则 : polymorphic deletion and unique_ptr behavior

在最近overloadjournal在执行零规则主题下,作者描述了我们如何避免编写五个运算符的规则,因为编写它们的原因是:资源管理多态性缺失这两个都可以通过使用智能指针来解决。这里我特别感兴趣的是第二部分。考虑以下代码片段:classBase{public:virtualvoidFun()=0;};classDerived:publicBase{public:~Derived(){coutpB=make_shared();pB->Fun();}在这种情况下,正如文章作者所解释的那样,我们通过使用共享指针进行多态删除,这确实有效。但是如果我将shared_ptr替换为unique_ptr

c++ - 在 `delete` 之后重用一个指针

执行以下操作是否安全和/或良好做法?//NewListisamemberfunctionofaclassvoidNewList(intsize){delete[]list;//listisamembervariable;analreadyinitializeddynamicarray.list=newListObject[size];}我基本上放弃了以前的数组,因为我将使用不同的数据存储在类中,因此需要一个新的list来存储关于新数据的其他信息。如果这不是好的做法,还有什么替代方案? 最佳答案 这取决于。每次用new创建一个对象,用