gpt4 book ai didi

c++ - 返回新分配的指针还是通过参数更新对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:45 27 4
gpt4 key购买 nike

我实际上是在处理指向用户定义对象的指针,但为了简单起见,我将使用整数来演示这种情况。

int* f(){
return new int(5);
}

void f2(int* i){
*i = 10;
}

int main(){

int* a;
int* b = new int();

a = f();
f2(b);

std::cout << *a << std::endl; // 5
std::cout << *b << std::endl; // 10

delete b;
delete a;
return 0;
}

考虑在函数 f()f2() 中有一些更复杂的计算来确定要返回的指针的值(f( )) 或通过参数更新(f2())。

既然它们都有效,我想知道是否有理由选择一个而不是另一个?

最佳答案

从玩具代码来看,我的第一个想法就是将 f/f2 代码放入实际对象的构造函数中,并完全取消自由函数。但假设这不是一个选项,它主要是风格/偏好的问题。以下是一些注意事项:

第一个更容易阅读(在我看来),因为很明显指针是一个输出值。当您将(非常量)指针作为参数传递时,很难一眼看出它是输入、输出还是两者兼而有之。

另一个选择第一个的原因是,如果您认同这样一种观点,即对象应该尽可能不可变,以便简化代码推理并排除线程安全问题。如果您正在尝试这样做,那么唯一真正的选择是让 f() 创建对象、配置它并返回 const Foo*(同样,假设您不能将代码移动到构造函数)。

选择第二种的原因是它允许您配置在别处创建的对象,并且对象可以是动态的或自动的。虽然根据上下文,这实际上可能是反对这种方法的一点——有时最好知道特定类型的对象总是在一个地方创建和初始化。

关于c++ - 返回新分配的指针还是通过参数更新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23549054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com