问题标签 [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.
c++ - C++:内存泄漏
问题:在变量n的什么值下,以下代码会导致内存泄漏?
那是代码:
- 很明显,如果 n 为 2,就会有内存泄漏。
- 如果 n 为 0,则可能会
发生内存泄漏(根据 C++ new int[0] - 它会分配内存吗?)
从 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的构造函数中的异常吗?它会导致内存泄漏吗?
c# - .NET 布局新
.NET 中是否有新的展示位置(如 C++)?
换句话说,如果我在 VB.NET 中分配一些内存
我想在 Foo 内存中实例 BarClass (类似于...)
但是,我没有看到任何语法可以做到这一点。
相反,我必须做类似的事情:
c++ - 安置有问题 - 新!
我在将引用计数指针<Type>
类的实例放入 Array 类时遇到问题。使用调试器,似乎从未调用构造函数(这会弄乱引用计数并导致段错误)!
我的 push_back 函数是:
引用计数在调用 new 之前和之后是相同的。我很确定这是问题所在,但我不知道为什么不调用构造函数。此外,Pointer::Pointer(...) 编译它是否需要一个 Pointer <T>
& 或一个 const Pointer <T>
& (嗯?),并且无论如何也有问题!
也许有一些关于安置新的细节我没有考虑到。如果有人有一些想法,他们将不胜感激!
编辑:[根据要求,来自指针的相关摘录]
我还为指针<T>
& and实现了 operator = T*
,以及 operator -> 和 operatorT*
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 将不再分配此纹理数据浮点数组而不会崩溃。
c# - “new”关键字在 C# 中有什么作用,为什么在不使用时它只是一个警告?
考虑以下代码:
这将生成以下警告:
“Test2.Data”隐藏了继承的成员“Test1.Data”。如果打算隐藏,请使用 new 关键字。
为什么这只是一个警告,添加“new”关键字会产生什么影响?
根据我的测试,一旦添加了“new”关键字,我就找不到任何区别。
不要误会我的意思,我完全是为了明确,但我很好奇添加“新”的好处。
我对它可能是什么的唯一想法是:
- 提高人类可读性
- 当编译器没有离开很长的路要解决不可避免的问题时,可以在运行时节省一些
c++ - 您将如何替换“新”关键字?
很久以前我发现了一篇文章(我找不到它 ATM),其中说明了 C++ 中的 new 关键字不好的原因。我不记得所有的原因,但我记得最多的两个是你必须将 new 与 delete 匹配,new[] 与 delete[] 匹配,并且你不能将 #define 与 new 一起使用,就像你可以与 malloc 一样。
我正在设计一种语言,所以我想问一下您将如何更改 C++ 语言以使新语言更加友好。随意陈述新文章和文章的问题。我希望我能找到文章链接,但我记得它很长,是由(IIRC)一所知名学校的教授写的。
c++ - 捕获 std::bad_alloc 的策略
所以我在开发中经常使用 Qt 并且喜欢它。Qt 对象的通常设计模式是使用new
.
几乎所有示例(尤其是 Qt 设计器生成的代码)都绝对不检查std::bad_alloc
异常。由于分配的对象(通常是小部件等)很小,这几乎不是问题。毕竟,如果您未能分配 20 个字节之类的东西,那么您可能无法解决这个问题。
目前,我采用了在 try/catch 中包装“大”(大小超过一页或两页的任何内容)分配的策略。如果失败,我会向用户显示一条消息,几乎任何更小的消息,我都会让应用程序崩溃并出现std::bad_alloc
异常。
所以,我想知道这方面的思想流派是什么?
检查每项new
操作是否是好政策?还是只有我认为有可能失败的人?
此外,在处理资源可能受到更多限制的嵌入式环境时,这显然是一个完全不同的故事。我在桌面应用程序的上下文中询问,但也会对涉及其他场景的答案感兴趣。
c++ - 使用类特定的 set_new_handler
对于特定于类的 new_handler 实现,我在“有效 c++”一书中遇到了以下示例。这在多线程环境中看起来有问题,我的问题是如何在多线程环境中实现类特定的 new_handler?
c++ - 在班级特定版本的新安置中做什么?
即使您无法替换全局版本,也可以提供特定于类的位置新版本。类应该提供自己的placement new 运算符的情况有哪些?
即使我的班级没有实现放置 new,以下代码也可以工作(假设 abc 没有重载 operator new)。
所以我解释说,有一些默认放置 new 但是对于类,我们可以提供我们自己的 operator new 版本,我的问题是它的用例是什么?除了返回传递的相同指针之外应该做什么?您是否遇到过任何有用的示例/场景?
c# - 创建一个新的 SaveFileDialog
经过大量的思考和考虑,以及谷歌,我一心想创建自己的 SaveFileDialog。
但我不知道从哪里开始,因为我没有在网上看到任何东西,我想知道是否有人以前做过这个,我应该研究什么,或者我该如何去做?
我想构建一个新的 SaveFileDialog,因为我觉得需要(或想要)为其添加更多功能。而且我还觉得如果我构建一个新的,我会学到更多关于 C# 以及 SaveFileDialog 如何在幕后工作的知识
老实说,我不喜欢当前的 SaveFileDialog(是的,它可以胜任),但我确实想为它添加额外的功能。
啊,我认为没有任何限制。我不能肯定地说,因为我是新手,不知道需要什么或......