展开全部
使用new操作符进行动态内存分配。
比如int *a = new int则a指向一块由动态分配而来的内存,使用完毕后要将其删除以释放空间,否则可能造成内存泄露。释放句法delete a。
如果是动态数组的话这样写int *a = new int[10],这样就创建了一个包含10个int元素的数组a,删除动态数组时要用delete [] a;否则只会把该数组的首个元素所占用的内存给释放了,以至造成内存泄露。
你还可以用布局new操作符将你希望创建的动态变量放在指定的buffer上,如:
int *p;
char buffer[20];
p = new (buffer) int;// 或int[5]
由于buffer指定的内存是静态内存而非堆栈,所以布局new操作不需要使用delete来释放空间。
对于类的动态内存分配你可以重载new和delete以让他们根据类的特性来动态分配和释放类的动态对象所使用的内存空间。
比如int *a = new int则a指向一块由动态分配而来的内存,使用完毕后要将其删除以释放空间,否则可能造成内存泄露。释放句法delete a。
如果是动态数组的话这样写int *a = new int[10],这样就创建了一个包含10个int元素的数组a,删除动态数组时要用delete [] a;否则只会把该数组的首个元素所占用的内存给释放了,以至造成内存泄露。
你还可以用布局new操作符将你希望创建的动态变量放在指定的buffer上,如:
int *p;
char buffer[20];
p = new (buffer) int;// 或int[5]
由于buffer指定的内存是静态内存而非堆栈,所以布局new操作不需要使用delete来释放空间。
对于类的动态内存分配你可以重载new和delete以让他们根据类的特性来动态分配和释放类的动态对象所使用的内存空间。
展开全部
用于设计时无法确定使用内存空间大小的东西。
比如保存一个用户自定义的字符串,字符串长度不是能在设计时就确定的。
遇到这样的情况必须使用动态分配内存,而动态分配的内存只能使用指针来调用。
例子:
第一个用户输入的字符串有10个字节,第二个用户输入有1000个字节,第三个用户输入有1000000000个字节,你设计的时候怎么知道他们要输入多少?只能用动态分配了....(除非你限定用户只能输入10个,否则....)
比如保存一个用户自定义的字符串,字符串长度不是能在设计时就确定的。
遇到这样的情况必须使用动态分配内存,而动态分配的内存只能使用指针来调用。
例子:
第一个用户输入的字符串有10个字节,第二个用户输入有1000个字节,第三个用户输入有1000000000个字节,你设计的时候怎么知道他们要输入多少?只能用动态分配了....(除非你限定用户只能输入10个,否则....)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询