返回右值与按值返回局部对象
Returning an rvalue versus returning a local object by value
在这种情况下,我们立即返回右值:
class boVector() {};
boVector createBoVector() {
return boVector();
}
void main() {
boVector reusable = createBoVector();
}
在本例中,我们创建了一个局部变量然后按值返回
class boVector() {};
boVector createBoVector() {
boVector bv;
return bv;
}
void main() {
boVector reusable = createBoVector();
}
每种情况下副本的总数是多少?前者有多余的副本吗?
在这两种情况下,您都在createBoVector()
中创建了一个局部变量。在该局部对象超出作用域并被销毁之前,从该局部对象复制构造reusable
。
唯一的区别是,一次你使局部变量显式(boVector bv
),另一次你没有。这里重要的是boVector
的返回类型。
createBoVector()
,但你不能真正影响或依赖它。而且,除非您的对象复制成本高得令人望而却步(不太可能),否则您也不应该担心这个问题。
每种情况下的副本总数是多少?
如果在类中实现复制构造函数(以及复制赋值操作符),则可以自己计算副本的数量。:
int copies = 0;
class boVector()
{
public:
boVector(const boVector&) { ++copies; }
boVector& operator=(const boVector &) { ++copies; return *this; }
};
void main() {
boVector reusable = createBoVector();
cout << "copies: << copies << endl;
}
相关文章:
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 如何访问从 COM 对象返回的 VARIANT 数据类型中的安全数组C++?
- 从我的对象返回静态数组
- 将unique_ptr作为<Object>unique_ptr<常量对象返回>
- 从右值对象返回成员
- 视觉对象 返回 C++ 中的双精度值
- 为什么类型为 sf::Text 的对象返回不同的 getPosition().y 和 getLocalBounds().
- std::min_element 从类对象返回意外结果
- C++无效的对象返回语义
- const引用是否延长临时对象返回的临时对象的寿命
- 将 NULL 作为对象返回时未收到任何警告
- 如何在 C# 中从 com 对象返回数组(double[])
- 从重载运算符返回引用,并使用临时对象返回表达式
- Cin 对象返回值 c++
- 将变量作为类对象返回
- 使用可更改对象返回只读的最佳方法是什么
- 如何在Cython中从另一个包装对象返回包装的c++对象
- 当对象返回时,c++动态数组被清除
- 从带有动态字段的函数、对象返回
- 从堆栈上的匿名对象返回对*this的引用