函数的 C++ 指针参数,如何避免更改输入

C++ pointer arguments to a function, How can I avoid changing the inputs

所以我有一个将指针作为参数的函数。类似于

Type *Foo(unsigned int head, Type *fixed, Type *period)
{
Type *periodCopy = new Type;
*periodCopy = *period;
Type *fixedCopy = new Type;
*fixedCopy = *fixed;
...

我操作periodCopy和fixedCopy,希望不改变fixed或period。然而,情况似乎并非如此。看起来我仍然在修改我提供给函数的任何内容。我是 c++ 和指针的新手,我无法真正理解这里发生的事情。副本不应该指向与非副本分开的数据吗?这是一个任务。我敢肯定,如果我可以更改指针的参数,我可以很容易地得到我想要的东西,但这不是一种选择。任何帮助表示赞赏。我希望这已经足够清楚了

你正在复制你自己。因此,您需要确保在从函数返回之前删除 period 和 fixed 的副本。

如果不需要复制,则在函数中使用const指针。

Type *Foo(unsigned int head, const Type *fixed, const Type *period)

更好的方法是使用引用。

Type *Foo(unsigned int head, const Type &fixed, const Type &period)
 //Now treat fixed and period as a normal object.

如果您确实需要复制,请按值传递参数。这将自动负责创建和销毁对象。但是拷贝构造函数必须是public.

 Type *Foo(unsigned int head, Type fixed, Type period)