C ++初始化没有New或Malloc / Calloc /等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++初始化没有New或Malloc / Calloc /等相关的知识,希望对你有一定的参考价值。

所以,代码如下所示。我一直在实现一个非常简单的HashMap,简单地定义了HashEntry类。

现在我对C ++没有超级经验,但是让我们说new,delete和malloc / free / realloc / etc都会导致我的系统崩溃并且需要调整代码。我真的不确定如何在没有这些工具的情况下处理构造函数和解构函数。

我知道有些东西,例如我可以像这样初始化一个字符串:string program(sizeVariable),但我真的不知道如何用这行table = new HashEntry*[TABLE_SIZE];做到这一点然后也失去了处理解构中的删除丢失。

任何答案或建议赞赏,也原谅格式,它在我的IDE中看起来不那么难看。

class HashMap {
    private:
       HashEntry **table;
    public:
       HashMap() 
       {
            table = new HashEntry*[TABLE_SIZE];
            for (int i = 0; i < TABLE_SIZE; i++)
                table[i] = NULL;
       }
  ...
       ~HashMap()
       {
            for (int i = 0; i < tableSize; i++)
                if (table[i] != NULL)
                    delete table[i];
            delete[] table;
       }

}
答案

全部,删除和malloc / free / realloc /等等

你几乎不应该使用C ++中的任何一个。对于日常的C ++开发,手动内存管理几乎已经无效。有许多更好的选择:

  • 聪明的指针,如unique_ptrshared_ptr
  • 容器如std::vectorstd::array

你需要阅读一本很好的Modern C ++入门书。从"A Tour of C++"开始。


如果您正在进行手动资源管理(...为什么?),您还需要关注rule of five

以上是关于C ++初始化没有New或Malloc / Calloc /等的主要内容,如果未能解决你的问题,请参考以下文章

C语言中已经有了malloc和free,为啥还需要new和delete?

C语言中new的用法

没有malloc的c中的动态内存分配

C++-------new 与malloc

C/C++——C++中new与malloc的10点区别

如何换出内存块?