搜索
您的当前位置:首页正文

c++基础(new)

来源:二三娱乐
Cplusplus-tutorial-in-hindi.jpg

new 这个关键字我们经常会用到无论是在 c++ 还是在像 java 或 c# 这样的高级语言我们无时无刻都会用到 new,因为太熟悉了,所以也就不以为然,可能以为太熟悉太自然反而让我们了解 new 的背后发生什么并不多。c++ 是效率的代言人,所以我们要用 c++ 而没有选择易学易用的高级语言。我们的目的一定是追求程序的性能。所以我们在设计程序和开发过程中一定要内存上多花一些心事,要不还不如选择 java 这样高级语言来实现。

如果很好地操作内存和利用内存,理解 new 就显得尤为重要。new 中表示在堆内存上分配内存给变量。使用 new 时候后面会跟基本类型或者 class。new int表示我们分配 4 字节内存给变量。系统根据请求找到连续的 4 字节内存,然后将内存地址返回给变量。

    int a = 2;
    int *b = new int;

new来分配内存后返回一个内存地址指针b

int *b = new int[50]; // 200 bytes
class Pointer
{
  private:
    String m_Name;

  public:
    Pointer() : m_Name("Unknown") {}
    Pointer(const String &name) : m_Name(name) {}

    const String &GetName() const { return m_Name; }
};

想要给 Pointer 的实例分配内存可以使用 new Pointer(),也可以写成new Pointer

Pointer *p = new Pointer();
Pointer *p = new Pointer;

想要定义 Pointer 数组,就可以这样来定义Pointer *arr = new Pointer[50];

    Pointer *p = new Pointer();
    Pointer *arr = new Pointer[50];

使用 new 来给 class 分配内存其实做了两件事—分配内存和调用构造函数

  • String m_Name;根据 Pointer 类的属性成员给类分配内存大小
  • 这里new Pointer[50];分配的内存是连续的,这一点希望大家清楚。

同样malloc方法可以分配并返回指针。

malloc(50);

既然mallocnew具有相同的功能,我们就可以用malloc来实现对内存的分配。

    Pointer *p = new Pointer;
    Pointer *p2 = (Pointer *)malloc(sizeof(Pointer));

我们可以这样改写,但是 newmalloc还是有区别的 malloc只是分配内存并没有像new那样调用Pointer的构造函数。

我们无论使用 new还是malloc分配内存给变量都需要手动来释放内存,
new需要使用 delete,如果是数组变量delete[]来显式地释放内存,随后我们还会了解更多的策略来释放内存。

int main(int argc, char const *argv[])
{
    int a = 2;
    int *b = new int[50]; // 200 bytes

    Pointer *p = new Pointer;
    Pointer *p2 = (Pointer *)malloc(sizeof(Pointer));
    delete p;
    delete[] b;
    free(p2);
    std::cin.get();
}

也可以显式地分配给内存 p 。

    int *b = new int[50]; // 200 bytes

    Pointer *p = new(b) Pointer;
Top