zoukankan      html  css  js  c++  java
  • 函数中分配内存的问题

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

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

    如:

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

    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正好就是我们想要分配给它地址的那个值,所以最后得到了想要的结果!!!

  • 相关阅读:
    RabbitMQ与AMQP协议详解
    MemCache超详细解读
    ASP.NET Web API通过ActionFilter来实现缓存
    ASP.NET Web API 通过Authentication特性来实现身份认证
    什么是CSR证书申请文件?
    跨平台的 SQL 客户端
    Java生成公私钥对
    git 删除错误提交的commit
    ServiceStack.Text反序列化lowercase_underscore_names格式的JSON
    .NET AES加解密(128位)
  • 原文地址:https://www.cnblogs.com/qilinzi/p/1940501.html
Copyright © 2011-2022 走看看