gpt4 book ai didi

c++ - 我如何正确地重载新的?

转载 作者:太空宇宙 更新时间:2023-11-04 15:52:04 29 4
gpt4 key购买 nike

我的代码如下。然而,在 main() 运行之前,一些简单的东西如 static std::string globalvar; 将调用 new。在 MyPool mypool 初始化之前。

MyPool mypool;
void* operator new(size_t s) { return mypool.donew(s); }

无论如何我可以强制先初始化 mypool 吗?如果没有办法初始化它的值,我不知道重载 new 应该如何工作,所以我确信有一个解决方案。

我同时使用 visual studio 2010 和 gcc(跨平台)

最佳答案

使 mypool 成为您的 operator new 函数的静态变量:

void* operator new(size_t s) {
static MyPool mypool;
return mypool.donew(s);
}

它将在第一次调用函数时初始化(即运算符 new)。

编辑:正如评论者指出的那样,在operator new 函数中将变量声明为static 限制了它的范围并使其在运算符删除。要解决这个问题,您应该为您的池对象创建一个访问器函数:

MyPool& GetMyPool() {
static MyPool mypool;
return mypool;
}

并在 operator newoperator delete 中调用它:

void* operator new(size_t s) {
return GetMyPool().donew(s);
}
// similarly for delete

和以前一样,将其声明为静态局部变量可确保在首次调用 GetMyPool 函数时进行初始化。此外,这可能是您想要的两个运算符中的同一个池对象。

关于c++ - 我如何正确地重载新的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6229046/

29 4 0
文章推荐: C++重载
文章推荐: C++多维数组
文章推荐: javascript - JQuery 弹出窗口未呈现
文章推荐: c++ - 引用和绑定(bind)对象
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com