问题标签 [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.
open-source - 登上开源列车
我知道如何找到开源项目。我知道如何找到它们。我不知道该怎么做是要求一份要做的事情的清单。我上过的每个开发者邮件列表都充满了真正的开发者。我从来没有看到任何新的程序员在场。大多数开源项目似乎对新程序员一点都不友好。
一个不是非常有经验的程序员的人怎么会要求做一些事情,同时看起来不烦人或麻烦。你对新手程序员的帮助有什么看法?
** 有项目的人是否有适合初学者的空间。我知道中级 C/C++/
c# - 函数的“静态新”修饰符有什么意义?
今天,我在遗留代码中发现了一些东西。它具有一项功能的“静态新”。它看起来像这样。
我不理解类Bar中Do方法的静态 new修饰符。在 C# 中,静态方法只能使用类名而不是对象名来调用。所以,我认为拥有“新”和没有“新”之间没有任何区别。
通常,如果某些语法是不必要的,C# 只是将其视为错误。有人知道为什么 C# 允许这样的语法吗?
c++ - 在 C++ 中何时使用“新”,何时不使用?
什么时候应该在 C++ 中使用“new”运算符?我来自 C#/Java 背景,实例化对象让我感到困惑。
如果我创建了一个名为“Point”的简单类,那么当我创建一个点时,我应该:
或者
有人可以为我澄清什么时候使用 new 运算符,什么时候不使用?
副本:
有关的:
c++ - delete[] 怎么知道它是一个数组?
好吧,我想我们都同意以下代码发生的事情是未定义的,具体取决于传递的内容,
指针可以是各种不同的东西,因此delete[]
对它执行无条件是未定义的。但是,让我们假设我们确实传递了一个数组指针,
我的问题是,在这种情况下,指针是一个数组,谁知道这一点?我的意思是,从语言/编译器的角度来看,它不知道arr
是数组指针还是指向单个 int 的指针。哎呀,它甚至不知道是否arr
是动态创建的。但是,如果我改为执行以下操作,
操作系统足够聪明,只删除一个 int 而不会通过删除超出该点的其余内存来进行某种类型的“杀戮狂欢”(与strlen
非\0
终止字符串对比——它将一直持续到它命中 0)。
那么记住这些事情是谁的工作呢?操作系统是否在后台保留某种类型的记录?(我的意思是,我意识到我在开始这篇文章时说发生的事情是不确定的,但事实是,“杀戮狂欢”的场景并没有发生,因此在现实世界中有人会记住。)
c++ - 新的必须总是跟着删除吗?
我想我们都明白delete
重新分配动态分配的指针以防止内存泄漏的必要性。但是,我很好奇,C++ 在多大程度上要求使用delete
? 例如,采取以下程序
虽然出于所有意图和目的,这里没有发生泄漏(因为您的程序正在结束并且操作系统将在它返回后清理所有内存),但标准是否仍然需要 - 或推荐 -delete[]
在这种情况下使用?如果没有,你会在这里有什么其他原因delete[]
吗?
c++ - C++ 'new' 运算符的问题?
我最近遇到了这种咆哮。
文章中提到的几点我不是很明白:
- 作者提到了
delete
vs的小烦恼delete[]
,但似乎认为它实际上是必要的(对于编译器),但从未提供过解决方案。我错过了什么? 在“专用分配器”部分的功能
/li>f()
中,似乎可以通过将分配替换为以下内容来解决问题:(省略对齐)在“重载 ::operator new[] 的危险”中,作者试图做一个
/li>new(p) obj[10]
. 为什么不这样做(远不那么模棱两可):'调试 C++ 中的内存分配'。不能在这里争论。
整篇文章似乎都围绕在自定义内存管理方案中具有重要 构造函数和析构函数的类展开。虽然这可能很有用,而且我无法反驳,但它的共性非常有限。
基本上,我们有放置新的和按类分配器——这些方法不能解决哪些问题?
另外,如果我只是笨拙和疯狂,在你理想的 C++ 中,什么会代替operator new
?必要时发明语法——什么是理想的,只是为了帮助我更好地理解这些问题。
add - 创建 Vista 用户帐户
我想以编程方式在启用了 UAC 的 Windows Vista 中创建登录帐户。
我有一个创建用户帐户的 OCX,它已经在 NT 和 XP 上工作了多年,但现在我们的应用程序在 Vista 上创建帐户时因访问被拒绝而失败。如果我们的客户关闭 UAC,然后设置该应用程序,它就可以正常工作。但是,在完成配置我们的应用程序之前让我们的用户关闭 UAC 并重新启动是不可接受的。
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 中:)。
visual-c++ - Visual Studio 2005 C++ 运行时新异常
我有一个带有调试和发布版本的 VS 2005 C++ 项目。我尝试了以下 4 件事:
- 通过 Visual Studio 构建一个 Debug 可执行文件,并通过 Visual Studio 运行它。
- 在
cd
'ing 到vstudio/debug
. - 通过 Visual Studio 构建 Release 可执行文件,并通过 Visual Studio 运行它。
- 在
cd
'ing 到vstudio/release
.
前3个全部成功:程序运行完成。
然而,第四个在运行时崩溃。调试显示罪魁祸首是对malloc()
operator 内部的调用new()
。相关上下文如下所示:
如果有人能想到任何会导致我描述的四分之三症状的问题,将不胜感激。
c# - “新”还是“新”
new
声明对象时何时使用关键字,何时不使用,是否有一个经验法则?
或者