【发布时间】:2018-01-10 03:04:41
【问题描述】:
我正在尝试编写一个函数来接收指针并使其指向一个新对象。为了做到这一点,我使用了一个ptr-to-ptr。这是我的函数的样子:
void modifyPtr(int ** ptrToPtr)
{
*ptrToPtr = new int(42);
return;
}
即使 ptrToPtr 为 nullptr,我也希望我的函数能够正常工作:
int ** ptrToPtr = nullptr;
modifyPtr(ptrToPtr);
我对该函数的第一个实现是不安全的,因为它会取消引用 nullptr。于是我想到了以下几点:
void modifyPtr(int ** ptrToPtr)
{
ptrToPtr = &(new int(42));
return;
}
但是不允许取new操作符返回的指针地址,编译时会报如下错误:
error: lvalue required as unary '&' operand
所以我想到了最后一个选择:
void modifyPtr(int ** ptrToPtr)
{
int * temp = new int(42);
ptrToPtr = &temp;
return;
}
但这会在运行时产生分段错误,这是我预料到的,因为一旦临时指针超出范围,它就会被删除,从而导致内存泄漏。
有没有办法让我的函数与 nullptr 一起工作?
【问题讨论】:
-
试试
new int*(new int(42))。当您执行 &(new int(42)) 时,您正在尝试获取指向文字的指针 -
您应该学习智能指针 (std::unique_ptr/std::shared_ptr)。您已经得到解决方案here 以通过引用传递。
-
感谢@O'Neil 的建议!我发布了这个问题,因为我有兴趣学习替代我的另一个问题中提供的问题。感谢您的回答@pepperjack,它完美无缺!
-
引用完全出于这个原因而存在。双指针太C了。
标签: c++ pointers new-operator