gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:29 26 4
gpt4 key购买 nike

因为我的 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;
}

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

最佳答案

因为它正在按值传递(即作为拷贝)。

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

void TestFunc(int *&pVar)

相反。

请注意,delete 只关心指针,而不是指针。因此,“删除”指针的拷贝会删除与原始指针相同的内容,因为无论哪种情况,您都在删除它们的目标,它们是相同的。

关于c++ - 尝试重置指针时的有趣问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6660189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com