2012-07-05 49 views
0

哪个库具有全局新和删除操作符的定义?具体来说,库中的哪个文件包含这些运算符的定义?全局新和删除操作符的定义

+0

这取决于您的实施。 – 2012-07-05 12:03:37

+0

如果您问这是如何制造的,他们会在自己内部使用malloc()和free()。 – SingerOfTheFall 2012-07-05 12:05:10

+0

@SingerOfTheFall:这不一定是真的。 – 2012-07-05 12:05:59

回答

3

operator newoperator delete非布局形式(和它们的数组形式)在每个翻译单元中都在全局范围内隐式声明。

标准布置形式在<new>中声明。

库函数的定义通常不可用。您的供应商可能会提供来源,在这种情况下,他们将在某处。

虽然,从你的意见,你可以谈论在新表达使用new,而不是operator new功能分配内存。 新表达式由编译器处理,生成对operator new和对象构造函数的必要调用。这可能不会有任何具体的实现;您需要查看编译器代码生成器的相关部分。

+0

@ Mike:我可以看到他们的代码就像看到'malloc','printf'等代码 – 2012-07-05 12:09:55

+0

@LinuxPenseur:声明是隐式的,所以你看不到它们。这些定义在源代码中的某处,无论是您的库还是您的编译器都由其构建而成 - 无论是否可用,这取决于供应商。 – 2012-07-05 12:11:42

3

没有指定它们在哪里定义的位置,但是指定它们在标头<new>中声明。 (你不应该有,如果你只是使用非配置new表达式中使用的标准版本包括<new>,这些都自动适用于所有翻译单元。)