问题标签 [new-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 投票
6 回答
611 浏览

c++ - C++:内存泄漏

问题:在变量n的什么值下,以下代码会导致内存泄漏?

那是代码:


从 5.3.4/7

当 direct-new-declarator 中表达式的值为零时,调用分配函数来分配一个没有元素的数组。

从 3.7.3.1/2

取消引用作为零大小请求返回的指针的效果是未定义的。

即使 [by new] 请求的空间大小为零,请求也可能失败。

这意味着您可以这样做,但是您不能合法地(以在所有平台上以明确定义的方式)取消引用您获得的内存-您只能将其传递给数组删除-您应该删除它。

这是一个有趣的脚注(即不是标准的规范部分,但包括用于说明目的)附加到 3.7.3.1/2 的句子中

[32. 目的是通过调用 malloc() 或 calloc() 来实现 operator new(),因此规则基本相同。C++ 与 C 的不同之处在于要求零请求以返回非空指针。]

  • 如果 n 为 1,我们得到:

int *a = Bar(1) 和 Bar(1) 抛出异常。它会是变量a的构造函数中的异常吗?它会导致内存泄漏吗?

0 投票
3 回答
1820 浏览

c# - .NET 布局新

.NET 中是否有新的展示位置(如 C++)?

换句话说,如果我在 VB.NET 中分配一些内存

我想在 Foo 内存中实例 BarClass (类似于...)

但是,我没有看到任何语法可以做到这一点。

相反,我必须做类似的事情:

0 投票
3 回答
558 浏览

c++ - 安置有问题 - 新!

我在将引用计数指针<Type>类的实例放入 Array 类时遇到问题。使用调试器,似乎从未调用构造函数(这会弄乱引用计数并导致段错误)!

我的 push_back 函数是:

引用计数在调用 new 之前和之后是相同的。我很确定这是问题所在,但我不知道为什么不调用构造函数。此外,Pointer::Pointer(...) 编译它是否需要一个 Pointer <T>& 或一个 const Pointer <T>& (嗯?),并且无论如何也有问题!

也许有一些关于安置新的细节我没有考虑到。如果有人有一些想法,他们将不胜感激!

编辑:[根据要求,来自指针的相关摘录]

我还为指针<T>& and实现了 operator = T*,以及 operator -> 和 operatorT*

0 投票
3 回答
4083 浏览

c++ - 内存分配崩溃

我偶然发现了一个我无法理解的奇怪问题。我不是 C/C++ 方面的专家,所以请耐心等待。我有一个 NPC 类,它派生自一个 Player 类,它派生自 Sprite 类。sprite 类包含一个 setupAnimation 函数,它分配一个浮点数组,其中包含纹理上的坐标,该数组的每个元素都指一帧动画。这一切都很好并且工作正常。

但是,当我向 NPC 类添加一个指针数组时,会出现问题。这些指针属于 Item 类类型。当我添加这个数组时,如果数组很小(10 是我测试的大小),它工作正常,但是如果大小有点大(100 是我测试的大小),在为前面提到的纹理坐标分配浮点数组时会崩溃测试)。

以下是一些代码片段,显示了我上面提到的材料:

Item 类指针数组:

纹理坐标及其对应的分配:

这段代码是从 Sprite 类派生的每个类的基础。我无法理解的是为什么额外的 90 个指针会在浮点分配期间导致问题。只需一些软件信息即可

操作系统:Windows Vista 32 位,编译器:Visual C++ 9.0,程序运行时内存:~17,600k,系统内存:~2GB

考虑到这一点,我看不到它正在耗尽内存,并且我无法理解指针数组如何导致分配失败。如前所述,分配在从 Sprite 派生的所有其他类(以及 Sprite 本身)中工作正常,但是一旦将此指针数组添加到 NPC 类,NPC 将不再分配此纹理数据浮点数组而不会崩溃。

0 投票
4 回答
2618 浏览

c# - “new”关键字在 C# 中有什么作用,为什么在不使用时它只是一个警告?

考虑以下代码:

这将生成以下警告:

“Test2.Data”隐藏了继承的成员“Test1.Data”。如果打算隐藏,请使用 new 关键字。

为什么这只是一个警告,添加“new”关键字会产生什么影响?

根据我的测试,一旦添加了“new”关键字,我就找不到任何区别。

不要误会我的意思,我完全是为了明确,但我很好奇添加“新”的好处。

我对它可能是什么的唯一想法是:

  • 提高人类可读性
  • 当编译器没有离开很长的路要解决不可避免的问题时,可以在运行时节省一些
0 投票
8 回答
1741 浏览

c++ - 您将如何替换“新”关键字?

很久以前我发现了一篇文章(我找不到它 ATM),其中说明了 C++ 中的 new 关键字不好的原因。我不记得所有的原因,但我记得最多的两个是你必须将 new 与 delete 匹配,new[] 与 delete[] 匹配,并且你不能将 #define 与 new 一起使用,就像你可以与 malloc 一样。

我正在设计一种语言,所以我想问一下您将如何更改 C++ 语言以使新语言更加友好。随意陈述新文章和文章的问题。我希望我能找到文章链接,但我记得它很长,是由(IIRC)一所知名学校的教授写的。

0 投票
6 回答
9733 浏览

c++ - 捕获 std::bad_alloc 的策略

所以我在开发中经常使用 Qt 并且喜欢它。Qt 对象的通常设计模式是使用new.

几乎所有示例(尤其是 Qt 设计器生成的代码)都绝对不检查std::bad_alloc异常。由于分配的对象(通常是小部件等)很小,这几乎不是问题。毕竟,如果您未能分配 20 个字节之类的东西,那么您可能无法解决这个问题。

目前,我采用了在 try/catch 中包装“大”(大小超过一页或两页的任何内容)分配的策略。如果失败,我会向用户显示一条消息,几乎任何更小的消息,我都会让应用程序崩溃并出现std::bad_alloc异常。

所以,我想知道这方面的思想流派是什么?

检查每项new操作是否是好政策?还是只有我认为有可能失败的人?

此外,在处理资源可能受到更多限制的嵌入式环境时,这显然是一个完全不同的故事。我在桌面应用程序的上下文中询问,但也会对涉及其他场景的答案感兴趣。

0 投票
3 回答
1911 浏览

c++ - 使用类特定的 set_new_handler

对于特定于类的 new_handler 实现,我在“有效 c++”一书中遇到了以下示例。这在多线程环境中看起来有问题,我的问题是如何在多线程环境中实现类特定的 new_handler?

0 投票
4 回答
579 浏览

c++ - 在班级特定版本的新安置中做什么?

即使您无法替换全局版本,也可以提供特定于类的位置新版本。类应该提供自己的placement new 运算符的情况有哪些?

即使我的班级没有实现放置 new,以下代码也可以工作(假设 abc 没有重载 operator new)。

所以我解释说,有一些默认放置 new 但是对于类,我们可以提供我们自己的 operator new 版本,我的问题是它的用例是什么?除了返回传递的相同指针之外应该做什么?您是否遇到过任何有用的示例/场景?

0 投票
4 回答
3363 浏览

c# - 创建一个新的 SaveFileDialog

经过大量的思考和考虑,以及谷歌,我一心想创建自己的 SaveFileDialog。

但我不知道从哪里开始,因为我没有在网上看到任何东西,我想知道是否有人以前做过这个,我应该研究什么,或者我该如何去做?

我想构建一个新的 SaveFileDialog,因为我觉得需要(或想要)为其添加更多功能。而且我还觉得如果我构建一个新的,我会学到更多关于 C# 以及 SaveFileDialog 如何在幕后工作的知识

老实说,我不喜欢当前的 SaveFileDialog(是的,它可以胜任),但我确实想为它添加额外的功能。

啊,我认为没有任何限制。我不能肯定地说,因为我是新手,不知道需要什么或......