我正在编写一个网络框架(尝试通过UDP实现可靠的层)。我有这个接收函数,接受指向数据包对象的指针。然后,网络框架完成一整套内容以接收数据包,并将数据包指针的值设置为此数据包。但这会发生一些深层次的功能。所以我基本上想知道的是,为什么这对我来说没有这样的工作:(非常基本的例子向你展示我的意思)
void Main()
{
int* intPointer = NULL;
SomeFunction(intPointer);
//intPointer is still null?
}
void SomeFunction(int* outInt)
{
SomeOtherFunction(outInt);
}
void SomeOtherFunction(int* outInt)
{
outInt = new int(5);
}
答案 0 :(得分:5)
SomeOtherFunction
按值传递指针,因此赋值仅更改传递地址的本地副本。
要使其工作,请通过引用传递指针:
void Main()
{
int* intPointer = NULL;
SomeFunction(intPointer);
//intPointer is still null?
}
void SomeFunction(int*& outInt)
{
SomeOtherFunction(outInt);
}
void SomeOtherFunction(int*& outInt)
{
outInt = new int(5);
}
话虽如此,使用返回值是否有问题?
void Main()
{
int* intPointer = SomeFunction(intPointer);
//intPointer is still null?
}
int* SomeFunction()
{
return SomeOtherFunction();
}
int* SomeOtherFunction()
{
return new int(5);
}
[更新以下评论。 ]
好吧,如果你有一个表示状态的返回值,可能表明是否已经读取了整数,那么你真正想要的是(使用bool
作为你特定状态的占位符):
void Main()
{
int intPointer = 0;
if (SomeFunction(intPointer) == true)
{
// read something
}
else
{
// failed to read.
}
}
bool SomeFunction(int& outInt)
{
return SomeOtherFunction(outInt);
}
bool SomeOtherFunction(int& outInt)
{
outInt = 5;
return true;
}
答案 1 :(得分:0)
最好使用空的std :: auto(unique)_ptr作为对SomeOtherFunction和SomeFunction的引用。如果SomeFunction引发异常,则SomeOtherFunction
中分配的内存不会有内存泄漏