如何在指定的内存区域 new 一个对象
2009-10-24 09:32
323 查看
#include "stdafx.h"
#include "iostream.h"
class A
{
public:
A() {cout<<"A()"<<endl;}
~A() {cout<<"~A()"<<endl;}
void* operator new (size_t size,void* pBuffer)
{
cout<<"A::new"<<endl;
return pBuffer;
}
void A1() {cout<<"A1()"<<endl;}
};
int main(void)
{
char pBuffer[1024];
A* a=new (pBuffer) A;
a->A1();
a->~A();
return 0;
}
运行结果
A::new
A()
A1()
~A()
这才正确,呵呵,前面写错了点,不好意思
这个程序编译有一个报警
warning C4291: 'void *__cdecl A::operator new(unsigned
int,void *)' : no matching operator delete found;
memory will not be freed if initialization throws an
exception
C:/VCWork/memObjTest/memObjTest.cpp(12) : see declaration of 'new'
说的是没有与异型new对应的delete,不要去管他就是了,因为这种调用法,最重要的就是不能用delete清除对象,否则,内存指针在对象清除时就被清除了,而推出函数时,自动释放pBuffer时,因为这块内存已经标记清除,肯定出错
很多C++的书籍说,显式调用析构函数是一个高级话题,说的就是这种情况
#include "iostream.h"
class A
{
public:
A() {cout<<"A()"<<endl;}
~A() {cout<<"~A()"<<endl;}
void* operator new (size_t size,void* pBuffer)
{
cout<<"A::new"<<endl;
return pBuffer;
}
void A1() {cout<<"A1()"<<endl;}
};
int main(void)
{
char pBuffer[1024];
A* a=new (pBuffer) A;
a->A1();
a->~A();
return 0;
}
运行结果
A::new
A()
A1()
~A()
这才正确,呵呵,前面写错了点,不好意思
这个程序编译有一个报警
warning C4291: 'void *__cdecl A::operator new(unsigned
int,void *)' : no matching operator delete found;
memory will not be freed if initialization throws an
exception
C:/VCWork/memObjTest/memObjTest.cpp(12) : see declaration of 'new'
说的是没有与异型new对应的delete,不要去管他就是了,因为这种调用法,最重要的就是不能用delete清除对象,否则,内存指针在对象清除时就被清除了,而推出函数时,自动释放pBuffer时,因为这块内存已经标记清除,肯定出错
很多C++的书籍说,显式调用析构函数是一个高级话题,说的就是这种情况
相关文章推荐
- java中如何理解多个对象共享同一个静态成员变量(多个实例的static变量会共享同一块内存区域)
- 从指定内存区域中new(分配)一个空间
- vs2005如何看到一个对象的内存分布
- 如何查看一个对象占用堆内存的大小
- JAVA内存使用--如何计算一个Java对象占用的字节数
- C++中如何在指定的内存中创建新对象
- 在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内
- new一个Object对象占用多少内存?
- 对象在内存中是如何存储的(内存五大区域和类加载)
- 如何保证一个类在内存中的对象唯一性?
- 建立一个存储和处理字符串的类DelCharStr。构造函数:动态申请存储字符串所需内存空间,并且即能用指定的字符串也能用默认的值0为所声明的对象进行初始化。
- 面试题:Student s = new Student();在内存中做了哪些事情?即创建一个对象做了哪些事情
- JAVA内存使用--如何计算一个Java对象占用的字节数
- new一个Object对象占用多少内存?
- 一个 new 对象在内存中的诞生
- Java中如何实现一个类在内存里只能创建一个实例对象
- JAVA内存使用--如何计算一个Java对象占用的字节数
- JAVA内存使用--如何计算一个Java对象占用的字节数
- 一个Objective-C对象如何进行内存布局?(考虑有父类的情况)
- 【Java】创建一个对象的步骤(如何加载进内存)(掌握)