c++ 语法二

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的内存地址都不相同,就是所有的对象都是复制构成,调用副本构造函数。

 

 

 

 

 

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值