我试图实例化一个对象,然后再将其删除,我在做什么错呢?
default:
//Instantiate object of the ErrorHandler class
errPtr = new ErrorHandler();
//Print the error message to the console screen
errPtr->showError("Invalid input, please select option 1 or 2, and press enter.");
delete errPtr;
errPtr->showError("hello"); //This line is being executed normally like object still exist.
break;
我的问题是我怎么能称呼showError(); 对象删除后的方法?
实例化和删除的方式没有任何问题-发生的事情取决于内存分配的方式(或者在这种情况下更合适的分配方式)。
当您free()
(delete
在c ++中)堆内存时,它只是将其标记为可用-不会清除您的指针或它以前指向的内存;这样做会降低性能,尤其是在您的对象很大的情况下。一切都保留在内存中,直到其他人使用它为止。
由于errPtr在您之后直接使用delete
,因此该对象仍在内存中。
C ++不会在删除指针后阻止您使用指针,但是这样做是一个非常糟糕的主意,因为您的指针现在指向的内存可能会被其他对象使用。
基本上,您在这里做错的是在释放指向其的内存后使用指针。删除对象后,您就不能再引用它了-您必须相信,一旦调用,内存就可以释放了delete
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句