尝试重置指针时有趣的问题

Ice*_*ind 1 c++ visual-studio-2010

因为我的C++不是那么好,这可能是一个非常简单/明显的答案,但它确实让我感到难过.请记住它有点晚了,我有点累了.我在这里得到了这个代码:

void TestFunc(int *pVar)
{
    cout << endl << *pVar << endl;
    delete pVar;
    pVar = nullptr;
}

int main(int argc, char *argv[])
{
    int *z(new int);

    *z = 5;
    TestFunc(z);
    if (z == nullptr)
        cout << "z Successfully Deleted!" << endl;
    else cout << "z NOT deleted!" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序编译得很好,没有错误或警告.当我运行它时,5就像我期望的那样显示它.不过,它说z NOT deleted!.我很好奇为什么即使我明确地在我的TestFunc()函数中设置它pVar也没有设置nullptr.任何帮助,将不胜感激.如果重要,这是Visual Studio 2010,只是一个常规的非托管C++应用程序.

Meh*_*dad 5

因为它是通过值传递的(即作为副本).

如果您希望传递变量本身(而不仅仅是其复制的值),请使用

void TestFunc(int *&pVar)
Run Code Online (Sandbox Code Playgroud)

代替.

请注意,delete只关心指针,而不是指针.因此,"删除"指针的副本将删除与原始指针相同的内容,因为在任何一种情况下,您都要删除它们的目标,这些目标是相同的.