【问题标题】:How do you delete an empty array of objects?如何删除一个空的对象数组?
【发布时间】:2015-04-04 10:13:04
【问题描述】:

我正在尝试创建一个构造函数来删除目录对象名称,然后是目录中的子目录,最后是目录本身。但是,delete [] *subDirectories 行在使用时会导致段错误。

子目录由

分配
subDirectories[subDirectoryCount++] = new Directory(arguments[1], umask, time, this); 

Directory::~Directory()
{
    delete [] name;

    for (int i = 0; i < subDirectoryCount; i++)
       delete subDirectories[i];
    delete [] *subDirectories;
}

【问题讨论】:

  • delete [] subDirectories。确保 subDirectories 是使用 new[] 创建的,否则您的行为未定义。
  • 如果是 C++,应该绝对避免使用 C 样式数组,并使用像 std::vector 这样的标准容器

标签: c++ arrays memory destructor delete-operator


【解决方案1】:

写:

delete [] subDirectories; 

确保使用new [] 分配subDirectories

无论如何,也不要再这样做了。如果要共享元素,请改用std::vector&lt;std::unique_ptr&lt;Directory&gt;&gt;,或std::vector&lt;std::shared_ptr&lt;Directory&gt;&gt;。无论哪种方式,让库为您管理内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多