C语言中:malloc()
C++中:new

静态存储的不足和优点

不足:
1.栈内存容量有限
2.对象的生存期和作用域不够灵活
3.对象数组:

  • 数组大小得是编译期常量
  • 数组中各对象大小,类型相同
  • 通常需要无参构造函数

4.类间编译期依赖与耦合度增加
优点:
不用担心内存的释放问题

用new运算符实现动态内存分配(堆内存)

第一种方法:分配一个变量

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(void)
  4. {
  5. int *ptr;
  6. ptr=new int;
  7. *ptr=5;
  8. cout<<*ptr;
  9. return 0;
  10. }

第二种方法:分配一个数组

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(void)
  4. {
  5. int *arr,i;
  6. arr=new int[10];
  7. for(i=0;i<10;i++)cin>>arr[i];
  8. for(i=0;i<10;i++)cout<<arr[i]<<ends;
  9. return 0;
  10. }

new运算符用法总结

和C语言中的malloc()没太大区别

用delete运算符释放动态分配

第一种方法:释放一个变量

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(void)
  4. {
  5. int *ptr;
  6. ptr=new int;
  7. *ptr=5;
  8. cout<<*ptr;
  9. delete p;
  10. delete p;//报错 一片空间不能被delete多次,否则程序异常终止
  11. return 0;
  12. }

第二种方法:释放一个数组

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(void)
  4. {
  5. int *arr,i;
  6. arr=new int[10];
  7. for(i=0;i<10;i++)cin>>arr[i];
  8. for(i=0;i<10;i++)cout<<arr[i]<<ends;
  9. delete [] p;//指针必须指向new出来的数组
  10. return 0;
  11. }

delete运算符用法总结

和C语言中的free()没太大区别
不过要注意delete一个数组时要加上”[]”
有new就一定要有对应的delete,否则会造成内存泄漏