1、指针的问题
int a =10;
int *pa = &a;
int *pb = pa;
这样表示了指针pa,pb 都指向了同一块内存地址
pa = 0;
这样表示了指针pa不指向任何内存地址,但是pb仍然是指向了a的地址。
2、const int* pa ,int* cont pb
pa 是指向了一块不可改变的内存,也就是说不能使用 *pa = 1000;
pb是一个不可改变的指针,也就是说不能使用 pb = newPoint;
3、在头文件类声明中函数默认为内联函数
4、对象在块中声明,在块中结束时对象被销毁,内存被释放,块外不能在访问这个对象
public void Test(){
Box box;
} //被销毁,不能再被访问,因此传对象是用指针,或者引用
(1)可以使用new 来创建
(2)不过可以用malloc分配内存,memcpy拷贝,free释放内存
(3)是char*的话可以用
name = new char[::strlen(_name)+1];
strcpy(name,_name);
5、对于副本构造函数,如果不实现的话,默认就是拷贝过去
比如class A{ char* name}
A a ;
A b = a;
(1)那么则a,b的name指向的是同一块内存
在释放a的name后,在释放b的name就会失败,因为这块内存已经被释放,那么则可以通过全局变量来控制释放。
上面针对的是动态分配内存的情况
(2 )如果其它属性不进行显示的拷贝的话,那么则复制后的对象的属性就是一个随机分配的内存,并没有通过
副本构造函数进行拷贝,所以对每个属性最好都显示的拷贝下,否则容易出问题。
6、参数为一般对象,不是指针,也不是引用的时候
class Box{};
class TestBox{
public :
Box box;
TestBox(Box _box){
box = _box;
}
Box getBox(){
return box;
}
}
测试:
Box box1;
TestBox tb(box1);
Box box2 = tb.box;
Box box3 = tb.getBox();
box1,box2,box3的内存地址都不相同,就是所有的对象都是复制构成,调用副本构造函数。