Operator new and new[]
    Operator new is similar with malloc() but with more features.

    1. //allocate an int, default initializer (do nothing)
    2. int * p1 = new int;
    3. //allocate an int, initialized to 0
    4. int * p2 = new int();
    5. //allocate an int, initialized to 5
    6. int * p3 = new int(5);
    7. //allocate an int, initialized to 0
    8. int * p4 = new int{};//C++11
    9. //allocate an int, initialized to 5
    10. int * p5 = new int {5};//C++11
    11. //allocate a Student object, default initializer
    12. Student * ps1 = new Student;
    13. //allocate a Student object, initialize the members
    14. Student * ps2 = new Student {"Yu", 2020, 1}; //C++11
    //allocate 16 int, default initializer (do nothing) 
    int * pa1 = new int[16];
    
    //allocate 16 int, zero initialized 
    int * pa2 = new int[16]();
    
    //allocate 16 int, zero initialized 
    int * pa3 = new int[16]{}; //C++11
    
    //allocate 16 int, the first 3 element are initialized to 1,2,3, the rest 0
    int * pa4 = new int[16]{1,2,3}; //C++11
    
    //allocate memory for 16 Student objects, default initializer
    Student * psa1 = new Student[16];
    
    //allocate memory for 16 Student objects, the first two are explicitly initialized
    Student * psa2 = new Student[16]{{"Li", 2000,1}, {"Yu", 2001,1}}; //C++11
    

    Operator delete and delete[]
    Destroys object/objects allocated by new and free memory

    //deallocate memory
    delete p1;
    //deallocate memory
    delete ps1;
    
    //deallocate the memory of the array
    delete pa1;
    //deallocate the memory of the array
    delete []pa2;
    // 8 == 10
    
    //deallocate the memory of the array, and call the destructor of the first element
    delete psa1;
    //deallocate the memory of the array, and call the destructors of all the elements
    delete []psa2;
    // 释放所有内存,只会把第一个元素的析构函数,17行代码会调用所有元素的析构函数