【发布时间】:2013-09-30 04:41:20
【问题描述】:
所以我已经使用 c++ 和指针一年半了,我认为我已经成功了。我之前多次调用过对象的删除,对象实际上被删除了,或者至少我认为它们确实被删除了。
下面的代码简直把我搞糊涂了:
#include <iostream>
class MyClass
{
public:
int a;
MyClass() : a(10) {
std::cout << "constructor ran\n";
}
void method(std::string input_) {
std::cout << param_ << "\n";
}
~MyClass() {
std::cout << "destructor ran\n";
}
};
int main()
{
MyClass* ptr = new MyClass;
ptr->method("1");
delete ptr;
ptr->method("2.5");
}
此代码输出:
constructor ran
1
destructor ran
2.5
我很困惑为什么它没有抛出任何类型的错误 - 我期待内存超出范围异常或类似情况,但没有。 for 循环在那里,以防有某种隐藏的垃圾收集,尽管据我所知 C++ 中没有垃圾收集。
谁能解释为什么这段代码可以工作,或者我在哪里出错了,因为它不会给我错误?
【问题讨论】:
-
它完全是偶然的。在
deleted 之后使用指针是错误的。它可能会做你认为正确的事情;它可能不会。 -
在
delete之后使用指针会进入未定义行为领域。 -
您可能希望在删除
nullptr值后将其设置为指针,以查看您的预期行为。
标签: c++ pointers memory-management destructor