|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include "pch.h"
- #include <iostream>
- template <class T>
- class Ctest
- {
- public:
- Ctest(T parr[], int len)
- {
- m_parr = new T[len];//这里为什么要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[i] == ch)
- {
- return i;
- }
- }
- return -1;
- }
- int main()
- {
- using namespace std;
- int arr[5] = { 1,89,45,7,2 };
- Ctest<int>obj(arr, _countof(arr));
- cout << "2是第" << obj.search(2) << "个元素" << endl;
- }
复制代码
问题:这段代码是查找数组里某个元素的位置,我的问题是为什么要new出一块空间来存放形参传来的数组,这样做的好处是什么
1. 对一些数据非常小又要经常分配的数据,频繁的分配和释放会造成内存碎片的。
2. 栈上能分配的空间默认很小(1M)。使用动态申请,可以再堆上申请比这个远远大得多的内存。
而且在有些时候,你并不知道需要多少空间,只有使用动态申请,以实现系统资源的有效利用。
|
|