C++检查指针是否通过,否则创建一个?

iQ.*_*iQ. 2 c++ pointers

好吧,我之前已经看到过这种情况,在你有一个带有指针参数并返回指针的函数之前.

但是,您可以选择不传递参数,它将返回一个动态分配的指针,但如果您确实传递了一个指针,那么它只是填充它而不是在堆上创建一个.这是一个没有重载的单一功能.

我的问题是这是如何安全地完成的?

我猜这是这样的:

point* funct(point *p = some_value)
{
 if p == some_value
   //create a point *p on the heap

 else
   //create use the given *p and fill it in

 return p
}
Run Code Online (Sandbox Code Playgroud)

现在我想不出这是否是正确的方法,如果它是一个什么可能是一个很好的some_value?它不能为NULL,因为当你传递空指针时它也会是NULL并且不确定它是否可以安全地使它大于0.你也不能在指针上有负数,所以什么是安全值?

有什么好方法可以跨平台进行PORTABLE吗?

编辑:

好吧也许我没有正确解释基本上我希望功能像这样使用:

point *x;
point *y;

x = func();
func(y);
Run Code Online (Sandbox Code Playgroud)

x = func(NULL);
Run Code Online (Sandbox Code Playgroud)

如果我使用NULL,只有当我执行func(y)时才会出现错误分段错误;

原因是:

用户传递他管理的指针,例如在堆栈上创建的指针,或者如果没有给出,则函数将返回动态指针.我不想强制只返回动态内存或只接受指向填充.

我知道我以前见过这件事.

Mar*_*ett 8

正常的解决方案是'if NULL allocate' - 这就是'c'realloc的作用.

看起来你想拥有一个使用现有内存的函数(如果提供),或者分配它自己的内存.如果传递有效指针,则不清楚应该返回什么.
它应该返回指针吗?
或者它应该为null以确保没有两个指向同一位内存的指针副本 - 如果它们被释放将导致问题.

将**指针传递给函数并需要参数可能更安全 - 即使该争论是指向null的指针.