在C++; 我对C++中指针的行为有点好奇。所以我有这个小程序要测试,不幸的是它运行得很好 #包括 课堂测试{ 公众: 测试(){ std::cout

在C++; 我对C++中指针的行为有点好奇。所以我有这个小程序要测试,不幸的是它运行得很好 #包括 课堂测试{ 公众: 测试(){ std::cout,c++,C++,是的,delete操作符只调用析构函数并释放指针指向的对象所占用的内存。指针本身与其他任何对象一样是局部变量,不能(也不需要)删除 可能值得注意的是,调用delete ptr;不会更改ptr的值,因此删除指针后ptr将指向已解除分配的内存。删除该内存后访问该内存将是未定义的行为。delete是查看对象poi的操作符指针变量仍然是一个局部值,其生存期与声明它的作用域相关联 您有3个指针对象,它们的生命周期不同。只有main中的ptr持续到程序结束。T和temp仅存在于destropher期间。我们

是的,
delete
操作符只调用析构函数并释放指针指向的对象所占用的内存。指针本身与其他任何对象一样是局部变量,不能(也不需要)删除


可能值得注意的是,调用
delete ptr;
不会更改
ptr
的值,因此删除指针后
ptr
将指向已解除分配的内存。删除该内存后访问该内存将是未定义的行为。

delete
是查看对象poi的操作符指针变量仍然是一个局部值,其生存期与声明它的作用域相关联

您有3个指针对象,它们的生命周期不同。只有
main
中的
ptr
持续到程序结束。
T
temp
仅存在于
destropher

期间。我们在编写时通俗地说“删除指针”

 delete x;
但是,这并不十分准确。删除的是
x
指向的对象

我的结论是,当我们删除指针时,实际上它只是删除指针引用的对象,而不是变量本身(变量指针将在程序结束时自动删除,与其他原始数据类型相同)。我的想法是真的吗

在实践中,上面提到的不准确是很好的,因为删除对象后,如果不调用实现定义或未定义的行为,就不能使用指针值,这也会影响指向同一对象的其他指针:

   int* x = new int(42);
   int* y = x;
   detele x;
   std::cout << x << y;   // implementation defined
   std::cout << *x << *y; // undefined
   x = new int(42);       // OK
int*x=新的int(42);
int*y=x;
德特尔x;
标准::cout
   int* x = new int(42);
   int* y = x;
   detele x;
   std::cout << x << y;   // implementation defined
   std::cout << *x << *y; // undefined
   x = new int(42);       // OK