草庐IT

delete_record

全部标签

c++ - unique_ptr : linked list entry deletion

我目前正在考虑借助unique_ptr实现单链表。尽管由于析构函数的递归调用(请参阅Stackoverflowwithunique_ptrlinkedlist)可能会出现堆栈溢出的问题,但我还是遇到了以下问题:假设,我们有以下链表的实现structnode{node(void):val(0),next(nullptr){}intval;std::unique_ptrnext;};并且我们已经根据初始化了我们的列表intmain(intargc,char*argv[]){nodeHEAD;HEAD.val=0;autoptr=&HEAD;for(inti=0;ival=i;ptr->ne

c++ - 既然 delete [] 知道数组大小,为什么这个信息不可用?

当我在C++(T*p=newT[n])中分配一个动态数组时,我使用delete[]p来释放分配的内存。显然,系统知道数组大小(以便调用n次T的析构函数)。这在别处讨论。例如Howdoesdelete[]“know”thesizeoftheoperandarray?.这是实现细节。但为什么没有决定公开这些信息呢?谢谢 最佳答案 delete[]可能不一定知道确切的数组大小。例如,它可能会过度分配,或者做一些完全奇怪但符合标准的事情。开玩笑的答案也可能是没有人能够说服标准委员会相信这个想法的优点;也许sizeof[](p)可能是建议的语

C++ "delete"很慢。我应该先看哪里?

我有一个C++应用程序,其中“删除”功能运行缓慢。什么可能导致这种情况,我应该从哪里开始寻找解决方案?背景:此C++代码位于AutoCAD内部运行的ARX文件中,它基本上只是一个DLL。删除速度较慢的特定计算机正在运行AutoCAD2011、Windows7、64位。AutoCAD2011的ARX必须使用VisualStudio2008ServicePack1进行编译。出现问题的计算机是客户的计算机。它没有安装任何版本的VisualStudio。在我的开发电脑上,代码在AutoCAD2011中没有任何问题。为了测试,我有一些删除链表的代码。在有问题的电脑上,删除列表需要0.7秒。在没有

c++ - throw 或 delete 表达式可以依赖吗?

gcc5.0和clang3.6都需要typename以下示例中的关键字:templatestructB{typedefintType;};templatestructA{typedeftypenameB::TypeThrow;typedeftypenameB::TypeDelete;};C++11标准中的以下措辞涵盖了这一点:[except]/2Athrow-expressionisoftypevoid.[expr.delete]/1Theoperandshallhaveapointertoobjecttype,oraclasstypehavingasinglenon-explicit

c++ - 在 "delete this"之后访问局部变量

我有一个使用引用计数机制的类。当引用计数降为零时,通过调用deletethis最终销毁此类的对象。我的问题是:在deletethis之后我可以使用本地堆栈变量吗?这是一个更具体的例子:classRefCountedClass{public:RefCountedClass(Mutex&m):mutex_(m){}...private:Mutex&mutex_;voidRemoveReference(){//AsIunderstand,mutex_willbedestroyedafterdelete,//butusingmisallrightbecauseitison-stackand//

c++ - 使用可选参数重载 new 和 delete 运算符

#include#include#include#includestructfoo{};inlinevoid*operatornew(size_tsize,foo*)throw(std::bad_alloc){std::cout输出(viaideone):mynew1我的想法是,C++会释放一个带有附加参数的新对象,并匹配删除相同的参数,但我显然是不正确的。让上面的代码调用我的重载删除的正确方法是什么? 最佳答案 当你使用任何形式的placementnew时,除了std::nothrow_t版本,你需要明确地销毁对象并以你认为合适的

c++ - unique_ptr::deleter_type::pointer 有什么用?

std::unique_ptr指定存储不是T*如您所料,但是类型为std::unique_ptr::pointer的对象.这基本上定义为D::pointer如果存在这样的类型,并且T*否则。因此,您可以通过适本地自定义删除器来自定义底层原始指针类型。什么时候这样做是个好主意?它是干什么用的?我能找到的唯一讨论是thisnote,这暗示“更好地支持[ing]共享内存上下文中的容器和智能指针”,但这并没有完全说明很多问题。 最佳答案 最初的动机是启用boost::offset_ptr的使用作为unique_ptr下的表示,这将允许在进程

c++ - 我可以像 delete[3] 一样为 delete[] 提供参数吗?

我读到delete[]可以释放对象数组。然而,在我读过的任何来源中都没有提到提供像delete[3]这样的参数是错误还是未定义。我有以下问题。是否在C++标准中指定了我是否可以/不能将参数提供给delete[]作为delete[3]?如果是,效果如何?在C++中是否还指定了我是否可以/不能对从new[]分配的数组使用delete? 最佳答案 (1)是的,它指定你不能。(3)指定结果未定义,所以不要。 关于c++-我可以像delete[3]一样为delete[]提供参数吗?,我们在Stac

c++ - Ada Variant Record 能否与 C++ union 二进制兼容?

我正在设计一个通信中间件,用于一个应用程序,该应用程序有一个Ada模块和许多C++模块,用于传递传递的参数(标量值)和结构。该应用程序在MSWindowsXP和Windows7中运行,C++部分在MSVC++2008中开发,Ada部分使用GPS/GNAT开发。Ada版本是1995,但我们正在进行编译器迁移(更新版本的GPS/GNAT),有可能使用更新的Ada规范。中间件是用C++编写的,我想使用包含在模块之间传递的所有类型的union类型,这样我就不需要为系统上使用的每种类型指定一个put/get函数。问题是,C++union是否与Ada变体记录二进制兼容?换句话说,如果我将C++un

c++ - 当我在 C++ 中对未初始化的指针调用 "delete"时会发生什么?

假设我声明了一个char指针,并在没有调用new的情况下对其调用delete。这会导致问题吗?char*myptr;if(condition)//dosomethinginvolvingmyptr=newchar[SIZE];else//dosomethingthatdoesntinvolvemyptr//domorestuffdelete[]myptr;我没有删除if下的myptr,因为如果condition为真,则//domorestuff中的另一个指针可以指向它。显然,如果condition为真,这就可以正常工作,因为在myptr上调用了“new”。如果我进入else条件,其中m