书上讲了怎么样在一个栈上(用new在指定位置分配内存)分配空间,下面是代码:
#include <stddef.h>
#include <iostream.h>class X {
int i;
public:
X(int I) { i = I; }
~X() {
cout << "X::~X()" << endl;
}
void* operator new(size_t sz, void* loc) {
cout << sz <<endl;
return loc;
}
void operator delete(void* p) {
    cout << "delete the placement of pointer " << endl;
    p = 0;
}

};void main(void)
{
int l[10];
X* xp = new(l) X(4);
delete xp;
//xp->X::~X();
}
我做了修改,重载了一个delete来释放分配的空间(实际上没有,我只是将指向那块空间的
指针置0,不知道有没有更好的办法?)可是在编译时有个警告:
warning C4291: 'void *__cdecl X::operator new(unsigned int,void *)' : no matching operator delete found; memory will not be freed if initialization throws an exception能帮忙解决下吗?谢谢!

解决方案 »

  1.   

    void operator delete(size_t sz void* p) {
        cout << "delete the placement of pointer " << endl;
                  cout<<sz<<endl;
        p = 0;
    }
    试试
      

  2.   

    如果用dean的方法编译会有错误。
    改了半天,还是没有找到为什么,惭愧!UP。
    我觉得可能不是main()中new形式的错误,而是你返回的变量没有初始化,你定义的int l[10]的大小(10)在X的new函数中根本无法体现出来,sz只是X的大小。
      

  3.   

    都不是的,我试过啦。
    new的用法是对的,这在语法书上已经说啦。
    但是delete并没有象 dean 说的那种形式,编译时会是错会的。
    请想想办法????