首页 > 解决方案 > 在 C++ 中通过函数删除对象

问题描述

我对 C++ 中指针的行为有点好奇。所以我有这个小程序要测试,不幸的是它运行良好。

#include <iostream>

class Test{
    public:
        Test(){
            std::cout<<"Test Created!\n";
        }
        ~Test(){
            std::cout<<"Test Destroyed!\n";
        }
};

void destroyer(Test* T){
    Test* temp = T;
    delete temp;
}

int main(){
    Test* ptr = new Test();
    destroyer(ptr);
}

它给予回报

    Test Created!
    Test Destroyed!

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

标签: c++

解决方案


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

值得注意的是,调用delete ptr;不会改变ptr,因此在删除指针后ptr会指向已被释放的内存。删除该内存后访问该内存将是未定义的行为。


推荐阅读