【问题标题】:C++ delete operator without "new" [duplicate]没有“new”的C ++删除运算符[重复]
【发布时间】:2018-07-16 14:23:16
【问题描述】:

是否可以在没有 new 运算符的类实例上使用 delete 运算符来释放内存?像这样:

Class myclass{public void hi{std::cout<<"hi\n";};}

myclass class1;
delete &class1;
class1.hi(); //results in error

谢谢

【问题讨论】:

  • 可能:是,正确:不可能。对于每个new,应该有一个delete,反之亦然
  • 你认为你为什么需要这样做?
  • 我只是好奇 :D
  • 我很确定这在语言标准和每个 C++ 教程中都有明确说明。现在你不能那样做。对于大多数实现,内存驻留在堆栈上,不能被释放,也不能以有意义的方式使用它。阅读堆栈和堆(例如 here 以更好地理解底层机制,但请记住这是实现细节,而不是 C++ 语言。
  • @RPGillespie:对我来说唯一有趣的问题是如果你有类似delete new foo[1];的东西会发生什么@

标签: c++ class delete-operator


【解决方案1】:

不,行为将是未定义

您只应在new 提供给您的指针上使用delete。指针的类型也需要相同,除非它指向一个适当的多态类实例。

【讨论】:

  • 那为什么程序在delete操作符后调用函数会出错而不是delete操作符呢?
  • @Nick:这是未定义行为的一种表现。非正式地,你可能已经完全耗尽了你的筹码。
  • 是不是说delete其实就是删除了非指针类型的对象?
  • @Nick:也许,也许不是。我认为您没有理解这里未定义行为的含义。
  • 不,未定义的行为意味着它可以做任何事情。它可能因实现、编译器版本甚至使用某些通用代码部分的不同程序而异。它可能会发生你期望它做的事情,但行为是绝对不稳定的,不能依赖。
猜你喜欢
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多