删除操作员内存管理 我试图理解C++中的内存管理。 这是我的密码: Person *P5 = new Person(); delete P5; std::cout<<P5->getWeight()<<std::endl; delete P5; std::cout<<P5->getWeight()<<std::endl; Person*P5=新人(); 删除P5; std::cout删除P5; std::cout删除P5; std::cout

删除操作员内存管理 我试图理解C++中的内存管理。 这是我的密码: Person *P5 = new Person(); delete P5; std::cout<<P5->getWeight()<<std::endl; delete P5; std::cout<<P5->getWeight()<<std::endl; Person*P5=新人(); 删除P5; std::cout删除P5; std::cout删除P5; std::cout,c++,memory-management,C++,Memory Management,这两个cout都不能保证为您工作,因为您使用的是已删除的对象。 只是有时候,当你删除一些东西时,内存没有被覆盖,数据仍然存在。但下次分配内存时可能会重新使用它。 当你这样做的时候 Person *P5 = new Person(); delete P5; p5是一个悬空的指针。只需在delete之后才使用它,因为您使用的是已删除的对象,因此cout也不能保证对您有效。 只是有时候,当你删除一些东西时,内存没有被覆盖,数据仍然存在。但下次分配内存时可能会重新使用它。 当你这样做的时候 Pe

这两个
cout
都不能保证为您工作,因为您使用的是已删除的对象。
只是有时候,当你删除一些东西时,内存没有被覆盖,数据仍然存在。但下次分配内存时可能会重新使用它。
当你这样做的时候

 Person *P5 = new Person();
 delete P5;

p5是一个悬空的指针。只需在
delete

之后才使用它,因为您使用的是已删除的对象,因此
cout
也不能保证对您有效。
只是有时候,当你删除一些东西时,内存没有被覆盖,数据仍然存在。但下次分配内存时可能会重新使用它。
当你这样做的时候

 Person *P5 = new Person();
 delete P5;

p5是一个悬空的指针。只要在删除后不要使用它,你可能会遇到未定义的行为。你的最后三行调用UB。为什么要在删除后打印出来?这很简单。如果您已经告诉操作系统您将不再使用内存,那么您将不再使用它。无论如何,如果你这样做,你不能保证任何事情。你可能遇到了未定义的行为。你的最后三行调用UB。为什么要在删除它后打印出来?这很简单。如果您已经告诉操作系统您将不再使用内存,那么您将不再使用它。无论如何,如果你这样做,你不能保证任何事情。