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 發(fā)表
我手頭沒有win的編譯器,所以希望有vs、vc的能幫我測(cè)試一下下面的代碼,看看輸出結(jié)果是什么。用gcc的也順便測(cè)試一下,我看看各個(gè)版本是否有差別。
class A
{
public:
int i;
...
原帖由 disheng727 于 2008-10-20 09:21 發(fā)表
厲害,原來P-1的存儲(chǔ)位置為該動(dòng)態(tài)存儲(chǔ)元素的個(gè)數(shù)。將其改成5,就調(diào)用了5次析構(gòu),如果改成7,也就將調(diào)用7次析構(gòu)。
int *ip = (int*)(p - 1);
原帖由 mik 于 2008-10-20 11:14 發(fā)表
用 A*p = new A[3]; 來建個(gè)A object 數(shù)組的模型的這樣的:
----------
| | A[2]
----------
...
原帖由 disheng727 于 2008-10-20 11:28 發(fā)表
好像有點(diǎn)不對(duì)吧,這種情況下只有當(dāng)該類對(duì)象的大小剛好為一個(gè)指針的大小才成立,如若把A的成員int i改為char ch,就有點(diǎn)問題,覺得應(yīng)該是:int *ip = (int*)(p) - 1;
原帖由 blizzard213 于 2008-10-20 11:29 發(fā)表
請(qǐng)問下 這個(gè)應(yīng)該只是一種通用的實(shí)現(xiàn)方式吧 標(biāo)準(zhǔn)不太可能規(guī)定這個(gè)
拜托 p只是指針。。。 其sizeof在一個(gè)特定平臺(tái)上是一個(gè)特定值
怎么和對(duì)象大小扯上關(guān)系了。。
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 發(fā)表
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 發(fā)表
我是新手,請(qǐng)教下,C++可以在unix上編譯嗎,原以為C++只能在win平臺(tái)上編譯,用vs編譯,是不是我搞錯(cuò)了,也可以用gcc編譯啊
歡迎光臨 Chinaunix (http://www.72891.cn/) | Powered by Discuz! X3.2 |