gpt4 book ai didi

c++ - 一个带有 vector 数据成员的类

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

我想定义一个带有 vector 数据成员的类。该类如下所示

class A{
...
private:
std::vector<int> v1;
...
};

如果我用operator new给class A分配内存,程序就OK了。但是,如果我从预分配内存中获取内存并将指针转换为 A* 类型,程序就会崩溃。

A* a = new A;
A* b = (A*)pre_allocated_memory_pointer.

我需要一个可变大小的 vector ,并希望从一个预分配的内存中获取 A 的内存。你知道这个问题吗?

最佳答案

std::vector 是一个需要初始化的对象,你不能只是分配内存并假装你有一个 vector

如果您需要控制从何处获取内存,解决方案是为您的类定义 operator::new

struct MyClass {
std::vector<int> x;
... other stuff ...

void *operator new(size_t sz) {
... get somewhere sz bytes and return a pointer to them ...
}

void operator delete(void *p) {
... the memory is now free ...
}
};

另一种选择是使用 placement new 指定在何处分配对象:

struct MyClass {
std::vector<int> x;
... other stuff ...
};

void foo() {
void * p = ... get enough memory for sizeof(MyClass) ...

MyClass *mcp = new (p) MyClass();

... later ...

mcp->~MyClass(); // Call destructor

... the memory now can be reused ...
}

但是请注意,std::vector 自行管理所包含元素的内存,因此如果您想控制所需内存的来源,则需要使用 STL“分配器” .

关于c++ - 一个带有 vector 数据成员的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22602973/

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