书上讲了怎么样在一个栈上(用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能帮忙解决下吗?谢谢!
#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能帮忙解决下吗?谢谢!
解决方案 »
- CreateProcess函数编译不过去,这是为什么呢? 明明是BOOL的一个参数却说是HANDLE类型
- 我的WSAEventSelect为什么只能接收一个客户端的数据呢?
- VS2005创建进程后的相互通信,急!!!!!!
- 请教strcpy()
- 怎么没有RemoteData控件?
- 感觉有的人在网上很快就能找到所需的源代码示例,有什么技巧么?
- 问个继承于CObject的类的问题(就这么多分了)
- 请教数据库编程的入门问题
- 如何把winsock控件封装成active DLL以便在asp中向远端计算机传送数据
- 关于Dll参数传递
- 高分求解:ShellExec的问题。
- 如何格式化数据库中得到的日期格式?
cout << "delete the placement of pointer " << endl;
cout<<sz<<endl;
p = 0;
}
试试
改了半天,还是没有找到为什么,惭愧!UP。
我觉得可能不是main()中new形式的错误,而是你返回的变量没有初始化,你定义的int l[10]的大小(10)在X的new函数中根本无法体现出来,sz只是X的大小。
new的用法是对的,这在语法书上已经说啦。
但是delete并没有象 dean 说的那种形式,编译时会是错会的。
请想想办法????