[問題] operator new in gcc452
先看範例程式及在LINUXAMD64下執行結果:
1 #include <cstdio>
2 #include <cstdlib>
3
4 class A
5 {
6 public:
7 A()
8 {
9 printf("A()=>%d\n", test);
10 }
11
12 void* operator new(size_t, int)
13 {
14 printf("A::operator new\n");
15 A *a = (A*)malloc(sizeof(A));
16 a->test = 100;
17 return a;
18 }
19
20 void operator delete(void* p)
21 {
22 free(p);
23 }
24
25 int test;
26 };
27
28 class B : public A
29 {
30 public:
31 #if 0
32 B()
33 {
34 printf("B()=>%d\n", test);
35 }
36 #endif
37
38 private:
39 int test2;
40 };
41
42 int main()
43 {
44 A a1;
45 printf("A1:test=%d\n\n", a1.test);
46
47 A *a2 = new (0) A();
48 printf("A2:test=%d\n\n", a2->test);
49
50 B b1;
51 printf("B1:test=%d\n\n", b1.test);
52
53 B *b2 = new (0) B();
54 printf("B2::test=%d\n\n", b2->test);
55
56 return 0;
57 }
Result:
A()=>-246330304
A1:test=-246330304
A::operator new
A()=>100
A2:test=100
A()=>-1787534240
B1:test=-1787534240
A::operator new
A()=>0
B2::test=0
========================================
主要有兩個問題:
1. 前三個值都很合理,但是第四個值為什麼是0呢?
2. 如果我把B的constructor那一段註解拿掉,那第四個值就會變成100。
謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.66.129
→
01/15 21:54, , 1F
01/15 21:54, 1F
→
01/15 21:55, , 2F
01/15 21:55, 2F
→
01/15 22:05, , 3F
01/15 22:05, 3F
→
01/15 22:05, , 4F
01/15 22:05, 4F
→
01/15 22:07, , 5F
01/15 22:07, 5F
推
01/15 22:25, , 6F
01/15 22:25, 6F
→
01/15 22:25, , 7F
01/15 22:25, 7F
→
01/15 22:27, , 8F
01/15 22:27, 8F
→
01/15 22:30, , 9F
01/15 22:30, 9F
推
01/16 06:49, , 10F
01/16 06:49, 10F
推
01/16 06:51, , 11F
01/16 06:51, 11F
→
01/16 06:51, , 12F
01/16 06:51, 12F
推
01/16 07:03, , 13F
01/16 07:03, 13F
→
01/16 07:04, , 14F
01/16 07:04, 14F
→
01/16 07:05, , 15F
01/16 07:05, 15F
推
01/16 07:07, , 16F
01/16 07:07, 16F
推
01/16 07:14, , 17F
01/16 07:14, 17F
→
01/16 07:15, , 18F
01/16 07:15, 18F
→
01/16 09:10, , 19F
01/16 09:10, 19F
→
01/16 09:13, , 20F
01/16 09:13, 20F
→
01/16 12:42, , 21F
01/16 12:42, 21F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章