问题标签 [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.

0 投票
7 回答
3078 浏览

c++ - C++ 数组删除运算符语法

做完之后说

Foo* array = new Foo[N];

我一直都是这样删的

delete[] array;

但是,有时我是这样看的:

delete[N] array;

由于它似乎可以编译和工作(至少在 msvc2005 中),我想知道:正确的方法是什么?那么为什么它会以另一种方式编译呢?

0 投票
13 回答
16896 浏览

c++ - C++ 删除 - 它删除了我的对象,但我仍然可以访问数据?

我编写了一个简单的、有效的俄罗斯方块游戏,每个块都作为类单块的实例。

我有一个扫描完整行的函数,并遍历块的链接列表,删除相关的块并重新分配 ->next 指针。

游戏正常运行,块被正确删除,一切正常运行。但是,经过检查,我仍然可以访问已删除数据的随机位。

如果我在删除后打印每个已删除的单块“x”值,其中一些返回随机垃圾(确认删除),其中一些返回 222,告诉我即使调用了析构函数,数据实际上并没有从中删除堆。许多相同的试验表明,没有正确删除的总是相同的特定块。

结果:

是否能够从超出预期的坟墓中访问数据?

对不起,如果这有点啰嗦。

0 投票
2 回答
389 浏览

c++ - 删除 [] 上的 Malloc 调用在 totalview 中显示为内存泄漏

我正在使用 HDF5 将字符串读入char*分配的new[]. 然后我使用 string::assign() 调用将此数据复制到我真正想要的位置。然后我调用delete[]那个 char*。这显示为使用 totalview 的内存泄漏的来源。它显示了 stdlibc++ 中delete[]to replace_safemutatecreate、 then下的错误调用malloc。发生了什么事,这真的是内存泄漏吗?我也设置GLIBCXX_FORCE_NEW=1在这里。

这是复制这种情况的示例代码。请注意,valgrind 显示没有泄漏,如果我没有在cout调用之前放置断点,totalview 没有发现泄漏。

0 投票
4 回答
908 浏览

c++ - 可以使用“删除这个吗?” 在从 Thread 类继承的对象上?

一般来说,如果你有一个类继承自一个Thread类,并且你希望该类的实例在它们完成运行后自动释放,可以delete this吗?

具体例子:

在我的应用程序中,我有一个Timer类,其中包含一个static名为schedule. 用户这样称呼它:

schedule方法创建一个Task对象(其目的类似于 Java TimerTask 对象)。类Task属于privateTimer并继承自Thread类(使用 pthreads 实现)。所以该schedule方法这样做:

构造Task函数保存参数以在新线程中使用。在新线程中,任务的run方法被调用,如下所示:

请注意,我不能使该task对象成为堆栈分配的对象,因为新线程需要它。另外,我已将Task课程private设置为Timer课程以防止其他人使用它。

我特别担心,因为删除Task对象意味着删除底层Thread对象。Thread对象中的唯一状态是pthread_t变量。有什么办法可以回来咬我吗?请记住,方法完成后我不使用该pthread_t变量。run

delete this我可以通过引入某种状态(通过Thread::start方法的参数或构造函数中的某些东西)来绕过调用,Thread这表明被分叉的方法应该delete是它正在调用该run方法的对象。但是,代码似乎按原样工作。

有什么想法吗?

0 投票
5 回答
530 浏览

c++ - 为什么 c++ 对 new 和 delete 有单独的语法?

为什么不能只是常规的函数调用?新的本质上是:

虽然删除是

那么为什么 new/delete 最终拥有自己的语法而不是常规函数呢?

0 投票
2 回答
1002 浏览

c++ - 您如何声明和使用重载的池运算符删除?

我想知道如何使C++-FAQ-lite 的第 11.14 节适应数组。

基本上,我想要这样的东西:

但是,我无法弄清楚声明和调用 this 的正确语法operator delete[] (pool)。有人可以帮忙吗?

0 投票
6 回答
1876 浏览

c++ - 删除如何区分内置数据类型和用户定义的数据类型?

如果我这样做:

那么C++编译器怎么知道后面的对象delete是内置数据类型还是类对象呢?

我的另一个问题是,如果我new指向一个int's 数组的指针,那么delete []编译器如何知道要取消分配的内存块的大小?

0 投票
6 回答
1421 浏览

c++ - 删除 std::map (Visual C++)

我有一个指向我试图删除的地图的指针(这个地图是用新分配的)。

我认为这张地图是有效的,当我在调试时将鼠标悬停在它上面时,它显示pMap[0]()..

当我尝试删除这个空地图时,我的应用程序就退出了,我得到了一个

myapp.exe 中 0xsomelocation 的第一次机会异常:0xsomenumber:调用的对象已与其客户端断开连接。

在输出窗口中。这是什么意思?

谢谢..

编辑:这是一些示例代码:

StructB 有一个重载的运算符() 编辑:StructB 确实是一个结构,对不起,运算符 () 只是一个字符串比较函数..

在我的代码的某些部分,一个类的构造函数调用一个方法,我们称之为 InitClass(),它像这样初始化一个 myMap 指针:

稍后在这个类的析构函数中,我去

谢谢

编辑:我恢复到旧版本的工作代码,现在工作正常..

起作用的是这样的:

早些时候,我将其更改为:

奇怪..代码中可能还有其他问题,但我只是不知道在哪里..如果我完整地发布代码,它太大了(我可能会被解雇)所以让我们离开就这样。。

我认为它可能是一个指向我试图清除或删除导致问题的空映射的指针。

感谢所有试图提供帮助的人...... :)

0 投票
8 回答
219 浏览

c++ - 我在这里正确使用删除吗?

我刚刚开始结合我对 C++ 类和动态数组的了解。我得到的建议是“任何时候我使用新的运算符”我都应该删除。我也知道析构函数是如何工作的,所以我认为这段代码是正确的:

主文件

PicLib.cpp

Pic我用一个包含更多动态数组的类填充我的 PicLib 。Pic的析构函数以与上面相同的方式删除它们。我认为这delete [] database可以正确地摆脱所有这些课程。

那么main.cpp中的删除是否必要?这里的一切看起来都很棒吗?

0 投票
3 回答
249 浏览

c++ - 删除内存错误

我有以下情况,

该函数在调用时会引发错误,因为它在尚未分配时setTest尝试删除。_test发生这种情况是因为_test未设置为 0X0。

谁能帮我理解这一点?