C++类对象的声明方式和注意事项
定义以下类:
class A{
public:
A(): A(0) { }
A(int i){
cout << "A(" << i << ")" << endl;
};
A(int i, int j){
cout << "A("<< i << ", " << j << ")" << endl;
}
}; 定义以下类:
class A{
public:
A(): A(0) { }
A(int i){
cout << "A(" << i << ")" << endl;
};
A(int i, int j){
cout << "A("<< i << ", " << j << ")" << endl;
}
}; 定义一个简单的类:
class A{
public:
A(){
cout << "A()" << endl;
}
~A(){
cout << "~A()" << endl;
}
}使用malloc/free和new/delete分别创建和释放对象:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main{
cout << "---malloc/free---" << endl;
A *a1 = (A*)malloc(sizeof(A));
free(a1);
cout << "---new/delete---" << endl;
A *a2 = new A;
delete a2;
return 0;
}运行:
---malloc/free---
---new/delete---
A()
~A()可见,malloc确实没有调用构造函数,free也没有调用析构函数。
delete和new对应,delete[]和new[]对应。delete用来删除单个对象,delete[]删除对象数组。
delete和delete[]的区别在于后者会调用数组内每一个元素的析构函数,而delete只会调用一个。两者在对于内置元素类型时功能一致,对于复杂类型delete可能会报错。
int main(){
cout << "------" << endl;
int *p1 = new int[10];
delete p1;
cout << "---delete[]---" << endl;
A *a2 = new A[1];
delete []a2;
cout << "---delete---" << endl;
A *a1 = new A[1];
delete a1;
return 0;
}执行会报错:

可见,对内置类型而言,互相使用并没有问题。但是对自定义类型而言,delete和delete[]并不能乱用。
面试题一道:
以下数据声明都代表什么含义:
float(**def)[10];double*(*gh)[10];double(*f[10])();
int*((*b)[10]);long (*fun)int;int (*(*f)(int, int))(int);
一道需要很小心的面试题,主要考了指针数组、数组指针以及函数指针的概念。
HTTP状态码一共有五大类:1xx, 2xx, 3xx, 4xx, 5xx。
各个大类的含义如下: