为什么运算符"new"需要指针才能工作?

Pla*_*y4u -1 c++ pointers new-operator dynamic-memory-allocation

我无法解决为什么new只能通过指针访问分配的堆栈中的内存,而堆中的内存(静态分配)可以正常访问.

是否与堆中的几乎所有内存都有某种顺序并且堆栈中的内存有点随机这一事实有关?(如果我刚才所说的是真的.)

动态记忆对我来说似乎是如此模糊和神秘,所以任何能够帮助我更好地理解它的人都会非常感激.

koc*_*ica 5

为什么运算符"new"需要指针才能工作?

因为它分配了内存块(大小由调用者指定)heap并返回address该分配块的开头.

我们为什么要使用它

  • 如果我们想要暂时使用内存,我们就会使用它,所以我们可以很容易地使用delete[]它.

  • 您可以轻松更改已分配内存的大小(调整大小).

    char arr[20]; // You need more space? Not possible to change size
    
    // While
    
    char * arr = new char[20];
    
    delete[] arr;
    
    arr = new char[50];
    
    Run Code Online (Sandbox Code Playgroud)

坏处

  • 分配对象new要贵得多.

  • 它比较慢.

  • 内存泄漏

  • 内存碎片

  • 必须是免费的 delete[]

摘要

Stack(automatic storage)更容易使用,更快速和万无一失.但有时我们必须使用heap,我们应该尽可能小心.