TOP

函数中分配内存的问题
2014-11-14 14:15:22 】 浏览:9742
Tags:函数 分配 内存 问题

  只是为了能够让自己讲清一些事!


  大家都知道,如果想要在在C++的函数中分配内存,那么就只得使用指针的引用传递,或是二级指针


  如:


  void MyNew(int** p)


  {


  *p = new int;


  }


  void MyNew(int*& p)


  {


  p = new int;


  }


  而通常我们在开始的学习中,都会写成


  void MyNew(int* p)


  {


  p = new int;


  }


  为什么这样分配不会成功呢?


  原理很简单,就是形参传递时的拷贝。


  当p传入进MyNew的时候,函数内部会对其进行拷贝。而函数内部真正操作和分配到了内存的,就是那个考贝后的变量。


  伪代码如下:


  void MyNew(int* p)


  {


  int* temp = p;


  temp = new int;


  }


  不言而寓,最终p也没有得到想要分配给他的址。


  而上面两种方式,采用了引用的,就不会产生拷贝,自然就不用解释了。


  而采用二级指针的,我们同样用伪码可以看到。


  void MyNew(int** p)


  {


  int** temp = p;


  *temp = new int;


  }


  虽然同样是进行了拷贝,但是由于 temp和p同样指向一个地方,则*temp正好就是我们想要分配给它地址的那个值,所以最后得到了想要的结果!


  编辑特别推荐:



函数中分配内存的问题 https://www.cppentry.com/bencandy.php?fid=80&id=12194

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++虚析构函数基本内容概述 下一篇函数指针声明与调用分析