gpt4 book ai didi

c++ - 如何在 C++ 的全局字符数组中动态分配类的实例?

转载 作者:行者123 更新时间:2023-11-28 04:39:05 25 4
gpt4 key购买 nike

我有这个代码:

const int size = 1024;
char pool[size];
int nextFree = 0;

class A
{
...
}

我必须扩展 class A 的功能,这样当客户端调用这个类的动态分配时:

A* a = new A();

然后是要放入全局数组pool中的实例。

我正在考虑重载 operator new 并在内部使用 placement new。像这样:

class A
{
...
void* operator new(size_t size)
{
void * pInt = ::new (&pool[nextFree]) A();
nextFree += size;
return pInt;
}
...
}

它一直有效,直到释放编译器抛出错误的动态分配:“free():无效指针”。我也尝试重载 operator delete 但没有成功。

有什么想法应该如何以正确的方式完成吗?

最佳答案

据我了解,您希望将对象放入池中,但对于最终用户而言,他们应该将对象放置在堆中。在这种情况下,您可以简单地这样做:

#include <iostream>

const int size = 1024;
char pool[size];
int nextFree = 0;

class A
{
public:
int i = 123; // some data

A() { std::cout << "constructor\n"; }
~A() { std::cout << "destructor\n"; }

static void* operator new(std::size_t size) noexcept
{
void *ptr = &pool[nextFree];
nextFree += size;
return ptr;
}

static void operator delete(void* ptr, std::size_t size) noexcept
{
//memset(ptr, 0, size); for example
}
};

int main()
{
A* a = new A();
std::cout << std::boolalpha << (a == reinterpret_cast<A*>(&pool[0])) << std::endl;
delete a;
}

https://ideone.com/zMW86t

关于c++ - 如何在 C++ 的全局字符数组中动态分配类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50638620/

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