问题标签 [delete-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在堆栈上分配的变量上调用 delete
忽略编程风格和设计,在堆栈上分配的变量上调用 delete 是否“安全”?
例如:
或者
c++ - 重载新/删除
我在我的程序中做了一个小内存泄漏查找器,但是我重载 new 和 delete(以及 new[] 和 delete[])的方式似乎没有做任何事情。
我重载的方式new
如上面的代码片段所示。我想这是运营商返回 void* 的问题,但我不知道该怎么做。
c++ - 是否有任何理由在删除之前检查 NULL 指针?
我经常看到在删除指针之前检查遗留代码NULL
,类似于,
是否有任何理由NULL
在删除指针之前检查它?之后设置指针的原因是什么NULL
?
c++ - 删除指向子类的指针会调用基类析构函数吗?
我有一个class A
为其一个字段使用堆内存分配。类 A 被实例化并存储为另一个类(class B
.
当我处理完 B 类的对象后,我调用delete
,我假设它调用了析构函数……但这是否也调用了 A 类的析构函数?
编辑:
从答案中,我认为(如果不正确,请编辑):
delete
B 的一个实例调用 B::~B();- 调用
A::~A();
A::~A
应该显式地delete
为 A 对象的所有堆分配的成员变量;- 最后,将存储所述 B 类实例的内存块返回到堆 - 当使用new时,它首先在堆上分配一块内存,然后调用构造函数来初始化它,现在在调用所有析构函数来完成对象之后对象所在的块被返回到堆中。
c++ - delete[] 怎么知道它是一个数组?
好吧,我想我们都同意以下代码发生的事情是未定义的,具体取决于传递的内容,
指针可以是各种不同的东西,因此delete[]
对它执行无条件是未定义的。但是,让我们假设我们确实传递了一个数组指针,
我的问题是,在这种情况下,指针是一个数组,谁知道这一点?我的意思是,从语言/编译器的角度来看,它不知道arr
是数组指针还是指向单个 int 的指针。哎呀,它甚至不知道是否arr
是动态创建的。但是,如果我改为执行以下操作,
操作系统足够聪明,只删除一个 int 而不会通过删除超出该点的其余内存来进行某种类型的“杀戮狂欢”(与strlen
非\0
终止字符串对比——它将一直持续到它命中 0)。
那么记住这些事情是谁的工作呢?操作系统是否在后台保留某种类型的记录?(我的意思是,我意识到我在开始这篇文章时说发生的事情是不确定的,但事实是,“杀戮狂欢”的场景并没有发生,因此在现实世界中有人会记住。)
c++ - 为什么 delete 不将指针设置为 NULL?
我一直想知道为什么删除后将指针自动设置为 NULL不是标准的一部分。如果这得到照顾,那么由于指针无效而导致的许多崩溃都不会发生。但是话虽如此,我可以想到标准会限制这一点的几个原因:
表现:
额外的指令可能会降低
delete
性能。可能是因为
const
指针。然后我想标准可以为这种特殊情况做点什么。
有谁知道不允许这样做的确切原因?
c++ - 删除指向 const (T const*) 的指针
我有一个关于 const 指针的基本问题。我不允许使用 const 指针调用任何非 const 成员函数。但是,我可以在 const 指针上执行此操作:
这将调用本质上是非常量“方法”的类的析构函数。为什么允许这样做?是否只是为了支持这一点:
还是有其他原因?
c++ - delete 如何处理指针常量?
我正在阅读这个问题Deleting a const pointer并想了解更多关于delete
行为的信息。现在,根据我的理解:
delete expression
分两步工作:
- 调用析构函数
free()
然后通过调用 operator delete释放内存(通常通过调用)。
operator delete
接受一个void*
. 作为测试程序的一部分,我重载operator delete
并发现它operator delete
不接受const
指针。
由于 operator delete 不接受 const 指针,并且 delete 在内部调用 operator delete,所以删除 const 指针是如何工作的?
delete
内部使用 const_cast 吗?
c++ - delete[] 是否等于删除?
如果我免费使用
它会导致内存泄漏,如果不是那么为什么?
这是VS2005生成的反汇编代码