class A { public: int i; ~A(){cout << "haha" << endl;} }; int main() { A *p = new A[3]; int *ip = (int*)(p - 1); *ip = 5; delete []p; } |
原帖由 kiffa 于 2008-10-20 02:33 发表
我手头没有win的编译器,所以希望有vs、vc的能帮我测试一下下面的代码,看看输出结果是什么。用gcc的也顺便测试一下,我看看各个版本是否有差别。
class A
{
public:
int i;
...
int *ip = (int*)(p - 1);
原帖由 mik 于 2008-10-20 11:14 发表
用 A*p = new A[3]; 来建个A object 数组的模型的这样的:
----------
| | A[2]
----------
...
原帖由 disheng727 于 2008-10-20 11:28 发表
好像有点不对吧,这种情况下只有当该类对象的大小刚好为一个指针的大小才成立,如若把A的成员int i改为char ch,就有点问题,觉得应该是:int *ip = (int*)(p) - 1;
拜托 p只是指针。。。 其sizeof在一个特定平台上是一个特定值
怎么和对象大小扯上关系了。。
class A
{
public:
//int i;
char ch;
~A(){cout << "haha" << endl;}
};
int main()
{
A *p = new A[3];
int *ip = (int*)(p - 1);
*ip = 5;
delete []p;
}
原帖由 j1111011 于 2008-10-20 11:44 发表
A *p = new A[3];
int *ip = (int*)(p - 1);
*ip = 8;
p[6] = 12;
A bobo = p[3];
bobo = p[4];
bobo = p[5];
bobo = p[6];
bobo = p[7];
delete []p;
我又尝试 ...
A *p = new A; cout << (long)p << endl; delete p; A *p2 = new A; cout << (long)p2 << endl; |
A *p = new A; cout << (long)p << endl; delete []p; // 注意。 A *p2 = new A; cout << (long)p2 << endl; |
原帖由 cj_gameboy 于 2008-10-20 08:19 发表
我是新手,请教下,C++可以在unix上编译吗,原以为C++只能在win平台上编译,用vs编译,是不是我搞错了,也可以用gcc编译啊
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |