最近在程序开发中遇到一个问题,我们能否将声明的各种类实例放在一块连续的内存?简而言之,就是我们申请一块连续的内存,然后将新声明的类实例都存到这块连续内存中。C++是可以支持这种简单操作的,对于类型T,新声明一个类型实例,分配到指针p指向的内存,操作如下:
new(p)T()
可以看到,通过在new操作符后面加上(p)的方式,将新建对象的内存指定到指针p指定的内存,当然这里要求指针指向的内存是存在且足够的,下面通过一个简单的实例来说明。
#include<iostream>
class Animal
{
public:
Animal(int age):animalAge(age)
{}
virtual void Foo(){
};
virtual void Boo(){
};
int getAge() {
return animalAge;
}
private:
int animalAge;
};
int main() {
char *p = new char[sizeof(Animal)];
Animal* pA= new(p)Animal(12);
std::cout << "Animal age is " << pA->getAge() << std::endl;
return 0;
}
输出结果:
Animal age is 12