C++中new一个动态数组(内置类型和自定义类型的区别)

在学习数据结构与算法的时候,T *p = new T[n]的算法复杂度为Θ(n),而int *p = new int[n]的算法复杂度为Θ(1)。
C++ primer的动态内存的讲解没有关于这一点的解释,自己测试了一下:

#include
using namespace std;

struct myClass
{
    int i = 5;
};

ostream &operator<<(ostream &out, const myClass &a)
{
    cout << a.i;
    return out;
}

int main()
{
    int *p1 = new int[5];
    myClass *p2 = new myClass[5];

    for (int i = 0; i < 5; ++i)
        cout << p1[i] << " ";
    cout << endl;

    for (int i = 0; i < 5; ++i)
        cout << p2[i] << " ";
    cout << endl;

    return 0;
}

运行结果:

对于动态数组的初始化:

对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作:

int *p1 = new int[5]; // 每个元素都没有初始化

int *p2 = new int[5] (); // 每个元素初始化为0

自定义类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化:

myClass *p1 = new myClass [5]; // 每个元素调用默认构造函数初始化

myClass *p2 = new myClass [5] (); // 每个元素调用默认构造函数初始化

所以n个元素调用默认构造函数的算法复杂度为Θ(n)。

你可能感兴趣的:(C++编程)