class TEST { private : int a; public : TEST(int n):a(n){} void Show(){ cout<<"a = "<<a<<endl; } ~TEST() { cout<<"这是析构函数,当才用布局new生成对象时要显示调用析构函数,不然析构函数将不会被调用,这句话也不会显示"<<endl; } }; void main() { //使用布局new可以满足LZ的要求 char *BUF = new char[sizeof(TEST)]; //分配创建TEST对象需要的空间 TEST *ptr = new (BUF)TEST(5); //通过这种方式就可以在刚刚分配的空间上new一个对象了 ptr->Show(); ptr->~TEST(); //这里要显示调用析构函数 如果缺少这一句当执行下面一句的时候BUF空间已经释放 //但TEST对象却没有析构 delete []BUF; //对不起,刚刚忘记了delete //也可以多分配一些空间 BUF = new char[3*sizeof(TEST)];//分配能够存放三个TEST对象的空间 TEST *ptr1 = new (BUF)TEST(1); TEST *ptr2 = new (BUF + sizeof(TEST))TEST(2); // 才用地址偏移来避免ptr1与ptr2两个对象分配到同一段内存 TEST *ptr3 = new (BUF + 2*sizeof(TEST))TEST(3); //同上 ptr1->Show(); ptr2->Show(); ptr3->Show(); ptr1->~TEST(); ptr2->~TEST(); // ptr3->~TEST(); 如果没有显示调用析构函数 ptr3所指对象就不会析构 当类中动态分配了空间的时候 ,极易导致内存泄露 delete []BUF; TEST *p = new TEST(100); //普通new分配空间创建对象 p->Show(); delete p; //普通new分配内存直接delete就OK了 //再次对不起,我在5楼的回复很不完全 }