没有 New 或 Malloc/Calloc/etc 的 C++ 初始化
C++ Initializing without New or Malloc/Calloc/etc
所以,代码如下所示。我一直在实现一个非常简单的HashMap,HashEntryclass也定义的很简单。
现在我对 C++ 不是很有经验,但是可以说 new、delete 和 malloc/free/realloc/etc 都会导致我的系统崩溃并且需要调整代码。如果没有这些工具,我真的不确定如何处理构造函数和解构函数。
我知道一些事情,例如一个字符串,我可以像这样初始化:string program(sizeVariable)
,但我真的不知道如何用这行 table = new HashEntry*[TABLE_SIZE];
然后也丢失了至于在解构中处理delete的丢失。
感谢任何答案或建议,也请原谅它在我的 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;
}
}
new, delete and malloc/free/realloc/etc all
你几乎不应该在 C++ 中使用任何这些。手动内存管理对于日常 C++ 开发来说几乎是死路一条。还有很多更好的选择:
智能指针,例如unique_ptr
和shared_ptr
。
容器,例如 std::vector
或 std::array
。
你需要读一本很好的现代C++入门书。从 "A Tour of C++".
开始
如果您正在进行手动资源管理(...为什么?),您还想遵循 rule of five。
所以,代码如下所示。我一直在实现一个非常简单的HashMap,HashEntryclass也定义的很简单。
现在我对 C++ 不是很有经验,但是可以说 new、delete 和 malloc/free/realloc/etc 都会导致我的系统崩溃并且需要调整代码。如果没有这些工具,我真的不确定如何处理构造函数和解构函数。
我知道一些事情,例如一个字符串,我可以像这样初始化:string program(sizeVariable)
,但我真的不知道如何用这行 table = new HashEntry*[TABLE_SIZE];
然后也丢失了至于在解构中处理delete的丢失。
感谢任何答案或建议,也请原谅它在我的 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;
}
}
new, delete and malloc/free/realloc/etc all
你几乎不应该在 C++ 中使用任何这些。手动内存管理对于日常 C++ 开发来说几乎是死路一条。还有很多更好的选择:
智能指针,例如
unique_ptr
和shared_ptr
。容器,例如
std::vector
或std::array
。
你需要读一本很好的现代C++入门书。从 "A Tour of C++".
开始如果您正在进行手动资源管理(...为什么?),您还想遵循 rule of five。