c++ - 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!

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

最佳答案

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

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

https://stackoverflow.com/questions/66687416/

相关文章:

python - 在 pandas 的 to_markdown() 中抑制科学记数法

c# - 解析不同的HttpClient

javascript - ("[object Promise]") 无法序列化为 JSON

python - 将数据规范化为 [-1 and 1] ,但需要保留 0 值

git - 有没有没有版本提交的 'bump the version' 的方法?

python - 类型错误 : input expected at most 1 argument,

python - 从具有相同键的多个字典中获取值

Flutter - 'showSnackBar' 已弃用 - 如何更新?

kotlin - 在 Kotlin 中定义数组类型

c - 将 foo(int *) 作为参数传递给 X 中的 foo(void*)