gpt4 book ai didi

c++ - 在 C++ 中确定对象是否动态分配

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

我有一个简单的 C++ 类,我需要知道在我的程序中的某个点是否应该删除一个对象。该机制应该可以跨平台和现代 C++ 编译器移植。

我能想到的一种方法是:有一个成员字段,它不是由构造函数初始化的,而是由重载的 operator new 分配的,如下所示:

class message
{
protected:
int id;
bool dynamic;
public:
message(int _id): id(_id)
{
// don't touch `dynamic` in the constructor
}

void* operator new(size_t size)
{
message* m = (message*)::operator new(size);
m->dynamic = true;
return m;
}

void operator delete(void* m)
{
if (((message*)m)->dynamic)
::operator delete(m);
}
};

除了“感觉”不对,这个方法还有什么问题?

编辑: 应该提到该对象要么是动态的要么是静态的(并且绝不是堆栈本地的),因此可以保证用 new 清零或初始化。

最佳答案

构造函数需要将 dynamic 设置为 false,然后您需要一个静态方法而不是覆盖 new,例如:

static message *createMessage(int _id)
{
message *ret = new message(_id);
ret->dynamic = true;
return ret;
}

然后调用该方法而不是 newing message

关于c++ - 在 C++ 中确定对象是否动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958808/

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