【问题标题】:destructor for queue (what's the benefit from it)队列的析构函数(有什么好处)
【发布时间】:2018-04-05 17:23:53
【问题描述】:

当我在学习 c++ 中的队列实现时,我提出了这个声明

queue::~queue() {
    if (storage) 
        delete [] storage;
}

那么 if (storage) 是什么意思? ,在实现中(Storage应该是一个存储数据的动态数组。那为什么我们说如果是true delete storage,是不是说存储满了?

【问题讨论】:

  • 正在测试指针是否为空。
  • 这并不是必须的,因为delete 在参数为空时什么都不做。
  • 指针在 c++ 中可以隐式转换为 boolnullptr 转换为 false 和所有其他指向 true 的指针。
  • 所以如果参数(存储)为空或赋值为零,这意味着它不包含任何内容,不需要删除它?
  • 是的。虽然如前所述,delete 运算符内置了这个检查。你对指针了解多少?

标签: c++ data-structures queue


【解决方案1】:

storage 是一个指针,如果指针不是空指针,则该指针被认为是“真”。所以这是测试storage 是否不为空,即已经为new 的队列分配了存储空间(如果没有分配存储空间,则该指针被初始化为空指针)。如果没有分配任何内容,则无需delete

不过,这是一个冗余检查,因为 delete 运算符本身内置了相同的测试。不过,有些程序员喜欢在他们的代码中明确表达。

【讨论】:

  • queue::queue(int queuesize) { front = rear =0; capacity = size=queuesize; count = 0; if (queuesize > 0) data = new int[queuesize]; else data = 0; }这个构造函数的实现。
  • 类声明中的storage成员变量是否有默认值?
  • no ,但是正如您在调用构造函数时注意到的那样,它会检查(队列大小是否等于零或否,如果为真,则在这种情况下的数据是存储分配为零
  • 嗯? datastorage 有什么区别?
  • 构造函数和析构函数中的变量是否不同?还是问题中的代码与评论来自不同的类?
猜你喜欢
  • 2023-03-21
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多