小狼狼头 发表于 2019-5-9 21:29:02

申请动态内存的好处是什么,什么时候需要申请动态内存


#include "pch.h"
#include <iostream>


template <class T>
class Ctest
{
public:
        Ctest(T parr[], int len)
        {
                m_parr = new T;//这里为什么要new出一块内存呢
                memcpy_s(m_parr, len * sizeof(T), parr, len*sizeof(T));
                m_len = len;
        }

        virtual ~Ctest()
        {
                if (m_parr)
                {
                        delete[] m_parr;
                }
        }
public:
        int search(T ch);
private:
        T *m_parr;
        int m_len;
};

template <class T>
int Ctest<T>::search(T ch)
{
        for (int i = 0; i < m_len; i++)
        {
                if (m_parr == ch)
                {
                        return i;
                }
        }

        return -1;
}

int main()
{
        using namespace std;
        int arr = { 1,89,45,7,2 };
        Ctest<int>obj(arr, _countof(arr));
        cout << "2是第" << obj.search(2) << "个元素" << endl;
}



问题:这段代码是查找数组里某个元素的位置,我的问题是为什么要new出一块空间来存放形参传来的数组,这样做的好处是什么

小狼狼头 发表于 2019-5-9 21:33:24

是因为栈空间是有限的吗?所以一般操作都申请一块内存进行处理,是这样吗

xceeet6 发表于 2019-5-9 22:32:13

mallco主要是在你内存不太够的情况下用来分配你的数据地址的,比如我做嵌入式,处理器的内存或者RAM没有PC大,我要搞个矩阵运算算不了,我就要申请mallco算,算一个free一个。
如果你在pc操作其实不用太注意mallco

xceeet6 发表于 2019-5-9 22:35:28

这个代码我的理解是 我一段数据mallco一段内存,它永远在这个内存里,直到程序结束或者释放或者覆盖它,好找

mqcake 发表于 2019-5-10 08:47:22

好处就是生命周期可以自己把控。

wwhywhy 发表于 2019-5-10 13:47:14

1. 对一些数据非常小又要经常分配的数据,频繁的分配和释放会造成内存碎片的。
2. 栈上能分配的空间默认很小(1M)。使用动态申请,可以再堆上申请比这个远远大得多的内存。
    而且在有些时候,你并不知道需要多少空间,只有使用动态申请,以实现系统资源的有效利用。
页: [1]
查看完整版本: 申请动态内存的好处是什么,什么时候需要申请动态内存