main 函数之前执行什么?
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "constructor A ... \n";
}
~A()
{
cout << "destructor ~A \n";
}
};
A a;
int main(void)
{
cout << "main start ...\n";
cout << "main end ...\n";
return 0;
}
执行结果:
constructor A …
main start …
main end …
destructor ~A
多态与虚函数
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "constructor A ..." << endl;
}
~A()
{
cout << "destructor A ..." << endl;
}
};
class B : public A
{
public:
B()
{
cout << "constructor B ..." << endl;
}
~B()
{
cout << "destructor B ..." << endl;
}
};
int main(int argc, char *argv[])
{
A* p = new B;
delete p;
}
内存释放不完全
执行结果:
constructor A …
constructor B …
destructor A …
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "constructor A ..." << endl;
}
virtual ~A()
{
cout << "destructor A ..." << endl;
}
};
class B : public A
{
public:
B()
{
cout << "constructor B ..." << endl;
}
~B()
{
cout << "destructor B ..." << endl;
}
};
int main(int argc, char *argv[])
{
A* p = new B;
delete p;
}
执行结果:
constructor A …
constructor B …
destructor B …
destructor A …
new 0个int
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int* p = new int[0];
*p = 5;
cout << "*p = " << *p << endl;
delete p;
}
执行结果:
*p = 5
神奇的没有报错
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
int* p = new int[0];
char *a = (char *)p;
strcpy(a, "abcdefg");
cout << "*a = " << *a << endl;
delete p;
}
执行结果:
*a = a
看来是分配的一个字节
数组与指针的区别
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
int* p = new int[10];
int a[] = {1, 2, 3, 4};
cout << sizeof(p) << " " << sizeof(*p) << " " << sizeof(a) << endl;
delete p;
}
64位机上的执行结果:
8 4 16
#include <iostream>
#include <string.h>
using namespace std;
void fun(int array[])
{
cout << "sizeof(array): " << sizeof(array) << endl;
}
int main(int argc, char *argv[])
{
int* p = new int[10];
int a[] = {1, 2, 3, 4};
cout << sizeof(p) << " " << sizeof(*p) << " " << sizeof(a) << endl;
fun(a);
delete p;
}
执行结果:
8 4 16
sizeof(array): 8
数组用来做参数则会在中间转成同类型的指针