问题标签 [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 投票
3 回答
241 浏览

open-source - 登上开源列车

我知道如何找到开源项目。我知道如何找到它们。我不知道该怎么做是要求一份要做的事情的清单。我上过的每个开发者邮件列表都充满了真正的开发者。我从来没有看到任何新的程序员在场。大多数开源项目似乎对新程序员一点都不友好。

一个不是非常有经验的程序员的人怎么会要求做一些事情,同时看起来不烦人或麻烦。你对新手程序员的帮助有什么看法?

** 有项目的人是否有适合初学者的空间。我知道中级 C/C++/

0 投票
4 回答
18022 浏览

c# - 函数的“静态新”修饰符有什么意义?

今天,我在遗留代码中发现了一些东西。它具有一项功能的“静态新”。它看起来像这样。

我不理解类Bar中Do方法的静态 new修饰符。在 C# 中,静态方法只能使用类名而不是对象名来调用。所以,我认为拥有“新”和没有“新”之间没有任何区别。

通常,如果某些语法是不必要的,C# 只是将其视为错误。有人知道为什么 C# 允许这样的语法吗?

0 投票
4 回答
133428 浏览

c++ - 在 C++ 中何时使用“新”,何时不使用?

可能重复:
我什么时候应该在 C++ 中使用 new 关键字?

什么时候应该在 C++ 中使用“new”运算符?我来自 C#/Java 背景,实例化对象让我感到困惑。

如果我创建了一个名为“Point”的简单类,那么当我创建一个点时,我应该:

或者

有人可以为我澄清什么时候使用 new 运算符,什么时候不使用?

副本:

什么时候应该在 C++ 中使用 new 关键字?

有关的:

关于 C++ 中自定义对象的构造函数/析构函数和 new/delete 运算符

在 C++ 中正确使用堆栈和堆?

0 投票
16 回答
132718 浏览

c++ - delete[] 怎么知道它是一个数组?

好吧,我想我们都同意以下代码发生的事情是未定义的,具体取决于传递的内容,

指针可以是各种不同的东西,因此delete[]对它执行无条件是未定义的。但是,让我们假设我们确实传递了一个数组指针,

我的问题是,在这种情况下,指针一个数组,谁知道这一点?我的意思是,从语言/编译器的角度来看,它不知道arr是数组指针还是指向单个 int 的指针。哎呀,它甚至不知道是否arr是动态创建的。但是,如果我改为执行以下操作,

操作系统足够聪明,只删除一个 int 而不会通过删除超出该点的其余内存来进行某种类型的“杀戮狂欢”(与strlen\0终止字符串对比——它将一直持续到它命中 0)。

那么记住这些事情是谁的工作呢?操作系统是否在后台保留某种类型的记录?(我的意思是,我意识到我在开始这篇文章时说发生的事情是不确定的,但事实是,“杀戮狂欢”的场景并没有发生,因此在现实世界中有人会记住。)

0 投票
6 回答
10663 浏览

c++ - 新的必须总是跟着删除吗?

我想我们都明白delete重新分配动态分配的指针以防止内存泄漏的必要性。但是,我很好奇,C++ 在多大程度上要求使用delete? 例如,采取以下程序

虽然出于所有意图和目的,这里没有发生泄漏(因为您的程序正在结束并且操作系统将在它返回后清理所有内存),但标准是否仍然需要 - 或推荐 -delete[]在这种情况下使用?如果没有,你会在这里有什么其他原因delete[]吗?

0 投票
2 回答
3193 浏览

c++ - C++ 'new' 运算符的问题?

我最近遇到了这种咆哮

文章中提到的几点我不是很明白:

  • 作者提到了deletevs的小烦恼delete[],但似乎认为它实际上是必要的(对于编译器),但从未提供过解决方案。我错过了什么?
  • 在“专用分配器”部分的功能f()中,似乎可以通过将分配替换为以下内容来解决问题:(省略对齐)

    /li>
  • 在“重载 ::operator new[] 的危险”中,作者试图做一个new(p) obj[10]. 为什么不这样做(远不那么模棱两可):

    /li>
  • '调试 C++ 中的内存分配'。不能在这里争论。

整篇文章似乎都围绕在自定义内存管理方案中具有重要 构造函数析构函数的类展开。虽然这可能很有用,而且我无法反驳,但它的共性非常有限。

基本上,我们有放置新的和按类分配器——这些方法不能解决哪些问题?

另外,如果我只是笨拙和疯狂,在理想的 C++ 中,什么会代替operator new?必要时发明语法——什么是理想的,只是为了帮助我更好地理解这些问题。

0 投票
2 回答
238 浏览

add - 创建 Vista 用户帐户

我想以编程方式在启用了 UAC 的 Windows Vista 中创建登录帐户。

我有一个创建用户帐户的 OCX,它已经在 NT 和 XP 上工作了多年,但现在我们的应用程序在 Vista 上创建帐户时因访问被拒绝而失败。如果我们的客户关闭 UAC,然后设置该应用程序,它就可以正常工作。但是,在完成配置我们的应用程序之前让我们的用户关闭 UAC 并重新启动是不可接受的。

0 投票
2 回答
4731 浏览

c++ - C/C++ 替换/重定义规则?

我对 C/C++ 并不是特别陌生,但今天我发现了一些我没想到的东西。这在 gcc 中编译:

这不会:

这也不是:

同样在 g++ 中编译:

这不会:

这样做:

(替换标准的 new 操作符在上述所有情况下都有效。替换替换的 new 操作符是非法的,我知道。)

很容易看到一种模式,但是有人可以给我一个“标准”的解释吗?为什么我可以在 .c 或 .cc 文件中做我在 .h 文件中不能做的事情(重新定义旧的 typedef,替换非法替换的函数)?


谢谢回复。我省略了一些代码,包括标题保护。在最后一个 .cc 示例中,我将 HTML 编码为 << 为 & gt ;> 错误地忘记包含 cstdlib。我已经修复了代码,所以它可以编译。然而,我忽略的另一件事是#define _NEW,它被证明是至关重要的。显然在 GNU 中,<new> 的标头保护定义了 _NEW,所以我在这里定义它阻止了标准新标头的包含,所以我替换工作了

所以,是的,唯一无法解释的是我为什么可以在 .c/.cc 文件中多次重新键入定义内容,但不能像这样在 .h 中重新键入:

反正我也不想那样做,只是想知道。

编辑:谢谢,这真的回答了所有问题。将其更改为 xyz 不允许在给定范围内进行多个定义,这感觉不错。:) 我做这些小测试的原因是我正在为一个小型操作系统编写 C 和 C++ 的一个子集,但是由于我使用现有的库而没有删除任何东西来帮助我进行测试,所以我正在尝试弄清楚如何确保(1)我的代码在测试中被调用(例如我的新位置)和(2)我的代码不会与 GNU 库发生冲突。(1)的答案现在看起来很明显。我只是将标准 Xh 中的标头保护宏#define 到我的 Xh 中:)。

0 投票
2 回答
463 浏览

visual-c++ - Visual Studio 2005 C++ 运行时新异常

我有一个带有调试和发布版本的 VS 2005 C++ 项目。我尝试了以下 4 件事:

  1. 通过 Visual Studio 构建一个 Debug 可执行文件,并通过 Visual Studio 运行它。
  2. cd'ing 到vstudio/debug.
  3. 通过 Visual Studio 构建 Release 可执行文件,并通过 Visual Studio 运行它。
  4. cd'ing 到vstudio/release.

前3个全部成功:程序运行完成。

然而,第四个在运行时崩溃。调试显示罪魁祸首是对malloc()operator 内部的调用new()。相关上下文如下所示:

如果有人能想到任何会导致我描述的四分之三症状的问题,将不胜感激。

0 投票
9 回答
988 浏览

c# - “新”还是“新”

new声明对象时何时使用关键字,何时不使用,是否有一个经验法则?

或者