C++ 在这个算法中,动态空间分配实际上是如何工作的?

C++ 在这个算法中,动态空间分配实际上是如何工作的?,c++,dynamic-arrays,dynamic-allocation,C++,Dynamic Arrays,Dynamic Allocation,为了学校的目的,我使用模板对一个动态分配的数组进行了自己的处理 虽然我将要问的有用,但我不知道如何以及为什么,我已经达到了我需要知道的程度 template <typename TElement> DynamicArray<TElement>::ensureCapacity () { if (capacity >= elemNumb) { return; //we have space to store the values }

为了学校的目的,我使用模板对一个动态分配的数组进行了自己的处理

虽然我将要问的有用,但我不知道如何以及为什么,我已经达到了我需要知道的程度

template <typename TElement>
DynamicArray<TElement>::ensureCapacity () {
    if (capacity >= elemNumb) {
        return; //we have space to store the values
    }
    //we need to allocate more space for the values
    TElement *auxArray = myArray;
    //create space to hold more numbers
    capacity = capacity * 2;
    myArray = new TElement[capacity];
    //copy the values
    for (int i = 0; i < size; i++) {
        myArray[i] = auxArray[i];
    }
    //release the memory
    delete[] auxArray;
}
模板
DynamicCarray::ensureCapacity(){
如果(容量>=elemNumb){
return;//我们有空间存储这些值
}
//我们需要为这些值分配更多的空间
TElement*auxArray=myArray;
//创建空间以容纳更多数字
容量=容量*2;
myArray=新远程通信[容量];
//复制值
对于(int i=0;i
我需要知道:
TElement*auxArray=myArray这是如何工作的?它是否使用指针,元素是否逐个复制?我需要了解它是如何工作的,这样我才能计算出我的算法的复杂性。我不介意是否有人告诉我复杂性,但我要寻找的真正答案是,这是如何工作的

另外
myArray=新的远程通信[容量]
我在删除旧的
myArray
之前执行此操作是否删除旧的?还是它仍然以这样或那样的形式漂浮在内存中的某个地方

TElement *auxArray = myArray;
只是意味着
auxArray
指向
myArray
指向的任何东西。没有任何其他内容的复制,它只是一个指针复制

这个


意味着
myArray
现在指向一个新的、动态分配的远程通讯阵列。表达式不会删除任何内容。但是
auxArray
指向的是
myArray
在此分配之前指向的内容,因此当您删除
auxArray
时,您将释放
myArray
最初指向的资源以澄清;“你是说你写了这段代码,但你不知道它是如何工作的?”OliCharlesworth Well ofc。C++是非常复杂的。我对它没有完全的了解。我可以很容易地做一些愚蠢的事情,比如创建500个动态分配的数组,而不去分配它们,也不通过内存流动,但我不知道,因为500*10 int没有那么多ram(0.019 mb)。我没有注意到这一点,即使这是生与死之间的区别。理解所有这些东西是必要的,但在实际代码中,您应该倾向于使用智能指针而不是原始指针来动态分配对象。看看好的,这就澄清了一切。谢谢大家!@卡莱克:很高兴听到这个消息。然后也许你可以接受答案,这样其他读者就不会认为你的问题仍然没有答案。
myArray = new TElement[capacity];