以临时对象为参数的C++对象构造函数
C++ Object Constructor with Temporary Object as Argument
我写了一些代码,突然想到我所做的可能是一个非常糟糕的主意。这是一个抽象的例子。关键点是通过矢量的参考。
// vector.hpp
class vector {
vector(double x, double y, double z);
}
// particle.hpp
class particle {
particle(const vector& _init_position);
vector m_position;
}
所以我写了一些代码来表示class vector
,它包含3D向量的东西,还写了一个粒子类,它的位置向量可以用构造函数和向量实例初始化。
在我的main()
函数中,我使用了一个临时对象来初始化粒子对象,如下所示:
int main() {
particle my_particle(vector(0.0, 1.0, 2.0)); // Temp vector instance - problem?
}
在这里,您可以看到创建了一个临时向量实例,我假设它被放置在堆栈的某个地方,然后调用粒子的构造函数。
这可以吗?或者这是一个非常糟糕的代码示例?我怀疑后者,因为我是通过引用传递的,因此临时向量的实例可能无效?
希望有人能澄清这一点?
允许将临时对象作为值或常量引用参数传递给函数。这是一件好事,因为在传递const引用时可以保存副本。
您没有显示向量构造函数的实现,但成员是一个值,所以我假设构造函数正在将其参数复制到成员。如果是这种情况,那么传递const-ref正是您想要做的,以避免不必要的复制。
你不想做的是保留对该论点的引用(或地址)。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象