gpt4 book ai didi

c++ - 在全局范围内调用 operator new

转载 作者:太空狗 更新时间:2023-10-29 23:41:47 25 4
gpt4 key购买 nike

我和一位同事争论在全局范围内编写此代码的可编译性:

int* g_pMyInt = new int;

我的论点围绕着这样一个事实:调用一个函数(new 是)在全局范围内是不可能的。令我惊讶的是,上面的行编译得很好(MS-VC8 和苹果的 LLVM 3)。

所以我继续尝试:

int* foo()
{
return new int;
}
int* g_pMyInt = foo(); // Still global scope.

而且,它也可以编译并像一个魅力一样工作(稍后用一个类进行测试谁的构造函数/析构函数打印出一条消息。 Actor 的消息通过了,dtor 没有通过。那个时候不那么惊讶了。)

虽然这对我来说似乎是非常错误的(没有有序/正确的方式/时间来调用删除),编译器不禁止它。为什么?

最佳答案

为什么不应该它被允许?您所做的只是初始化一个全局变量,我们非常欢迎您这样做,即使初始化涉及函数调用也是如此:

int i = 5 + 6;

double j(std::sin(1.25));

const Foo k = get_my_foo_on(i, 11, true);

std::ostream & os(std::cout << "hello world\n");

int * p(new int); // fine but very last-century
std::unique_ptr<int> q(new int); // ah, welcome to the real world

int main() { /* ... */ }

当然,您需要担心删除动态分配的对象,无论它们是否在全局范围内分配......一个拥有资源的包装类,如 unique_ptr 将是理想的解决方案.

关于c++ - 在全局范围内调用 operator new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8077633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com