0

我的任务是在模​​板中为通用类型 T 创建一个缓冲区。我得到了一个分配的字符数组,我应该在不使用 STL 的情况下将其转换为缓冲区。

我对其中的一些还很陌生,我不知道如何获取该内存并将其转换为 T 数组(知道类型 T 占用了多少空间)。我试过弄乱地址,但这似乎不起作用。

有人能帮我吗?

4

1 回答 1

0

要在原始内存和对象之间进行转换,您需要以放置形式构造对象,这与new操作符一样。除非您正在编写专用的容器类,否则这通常不是您应该做的事情,但方法如下:

char memory[sizeof(T) * 10];           // gives pointers to raw memory
T * objects[10];                       // stores pointers to objects

for (unsigned int i = 0; i != 10; ++i)
{
    objects[i] = new (memory + i * sizeof(T)) T;      // even better: "::new"
}

然后删除:

for (unsigned int i = 0; i != 10; ++i)
{
    objects[i]->~T();
}

这在各种方面仍然是非常错误和糟糕的,但这是一个开始。

不要这样做。

(这有两个问题:a)您需要保证内存的适当对齐。b)您需要考虑如果任何构造函数T抛出异常会发生什么。)

于 2013-04-23T19:59:17.283 回答