• C++创建对象时什么时候用*,什么时候不用*


    用*, 表示创建的是一个指针对象,C++中用new关键字开辟内存。

    另外指针对象访问成员变量用-> , 非指针用. 就这么个原则

    但是指针也可以不用-> 例如 (*p).age  所以->其实就是先*后.的简写吧

    同样一个问题:

    C++用new和不用new创建类对象区别

    使用new, 必须配套使用delete,调用delete时才会调用析构函数,若不delete,那么可能造成内存泄漏, delete时还要注意,delete NULL会崩溃
    不用new, 析构函数会自动执行

    代码:

    
    
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    class Person{
        
    public:
        ~Person(){
            cout << "Person析构函数" << endl;
        }
        
    public:
        string *name;
        int age;
        
    };
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        std::cout << "Hello, World!
    ";
        
    //    Person *p1 = new Person();
    //    cout << p1->age << endl;
    //    delete p1;
        
        
        Person p2 = Person();
        cout << p2.age << endl;
        
        
        
        return 0;
    }
    

    下面是一个简单的动态数组的代码:

    #ifndef MyArray_hpp
    #define MyArray_hpp
    
    #include <stdio.h>
    
    class MyArray {
        
        
    public:
        MyArray();
        MyArray(int capacity);
        MyArray(const MyArray& array);
        
        ~MyArray();
        
        
        //尾插法
        void push_Back(int val);
        
        //根据索引获取值
        int getData(int index);
        
        //根据索引设置值
        void setData(int index,int val);
        
    private:
        int *pAdress;
        int m_Size;
        int m_Capacity;
        
    };
    
    #endif /* MyArray_hpp */
    
    #include "MyArray.hpp"
    #include <iostream>
    using namespace std;
    
    MyArray::MyArray()
    {
        this->m_Capacity = 100;
        this->m_Size = 0;
        this->pAdress = new int[this->m_Capacity];
    }
    
    MyArray::MyArray(int capacity){
        this->m_Capacity = capacity;
        this->m_Size = 0;
        this->pAdress = new int[this->m_Capacity];
    }
    
    MyArray::MyArray(const MyArray& array){
    
        this->pAdress = new int[array.m_Capacity];
        this->m_Size = array.m_Size;
        this->m_Capacity = array.m_Capacity;
    }
    
    MyArray::~MyArray(){
        
        cout << "析构函数调用" << endl;
        if (this->pAdress != NULL) {
            delete [] this->pAdress;
            this->pAdress = NULL;
        }
        
    }
    
    void MyArray::push_Back(int val){
        this->pAdress[this->m_Size] = val;
        this->m_Size++;
    }
    
    int MyArray::getData(int index){
        return this->pAdress[index];
    }
    
    void MyArray::setData(int index, int val){
        this->pAdress[index] = val;
    }
    
    void test01(){
        
        MyArray *array1 = new MyArray(30);
        //(MyArray *) array1 = 0x0000000100648440
        
        MyArray array2;
        /*
             {
             pAdress = 0x0000000100649240
             m_Size = 0
             m_Capacity = 100
             }
         */
        MyArray array = MyArray(30);
        /*
              {
              pAdress = 0x000000010064b680
              m_Size = 0
              m_Capacity = 30
              }
          */
    }
    

    这位老师说的很细 https://blog.csdn.net/qq_35644234/article/details/52702673

    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    golang版本管理工具gvm
    golang问题101
    服务器部署Jupyter Notebook
    Python 获取MySql某个表所有字段名
    Python自带HTTP文件传输服务
    log4net 配置
    GridView控件RowDataBound事件中获取列字段值的几种途径
    最简单去Button回车事件
    oracle 多条执行语句同时执行
    MERGE Into
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/10661223.html
Copyright © 2020-2023  润新知