我有一个相对直截了当的问题,但在网上找不到答案。我知道C++中,如果你要创建一个大对象(比如说一个大的字符串向量),你会避免做:
int main() {
vector<string> v = foo()
}
vector<string> foo() {
vector<string> result;
// populate result
return result;
}
而是选择下面的版本,因为上面的方法调用必须将本地向量复制到main中声明的向量,而下面的示例直接添加到main中的向量(或多或少):
int main() {
vector<string> v;
foo(v)
}
void foo(vector<string>& result) {
// populate result
return result;
}
我的问题和python是一样的。最好是将可变对象作为参数传入,还是让方法在本地创建一个并返回它?我对Python的机制不太熟悉。你知道吗
Python的数据模型与C++的数据模型有很大的不同。
在Python中,新对象是在堆上创建的,并绑定到名称空间中存在的变量(函数调用、类、实例和语言实现名称空间的各种其他部分)。你知道吗
<>在C++中,如果没有适当的小心,可以在堆栈上分配的函数或方法调用中创建对象。如果你的函数返回一个对这个对象的引用,你会看到问题,因为内存可能会被重复使用,引用充其量也会变得无效,最坏也会变得危险!你知道吗在Python中,不可能创建这种类型的“悬挂引用”,因为只要存在对对象的任何引用,对象就会保持活动状态。因此,在函数中创建新对象并返回它们是完全允许的。这通常比强制调用者为要修改的函数创建可变对象更好。你知道吗
相关问题 更多 >
编程相关推荐