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++应用程序.
因为它是通过值传递的(即作为副本).
如果您希望传递变量本身(而不仅仅是其复制的值),请使用
void TestFunc(int *&pVar)
Run Code Online (Sandbox Code Playgroud)
代替.
请注意,delete
只关心指针,而不是指针.因此,"删除"指针的副本将删除与原始指针相同的内容,因为在任何一种情况下,您都要删除它们的目标,这些目标是相同的.