关于将变量传递到STL容器并且不会在范围外丢失它们
About passing variables to STL containers and not losing them out of scope
假设我们有以下代码:
void foo()
{
Point newpoint(...);
dq.push_back(newpoint);
...
return dq;
}
假设dq
是deque,Point
是某个类。
在C
中,当foo()
结束时,newpoint
就消失了,例如,如果它被传递到一个数组,它就会变成垃圾,但我看到在c++
中,dq
实际上在它超出foo()
的范围时保留了它,它真的在newpoint
上调用了复制构造函数吗?newpoint
到底发生了什么?这是STL容器或C++
构造函数的一个特性吗?
它真的调用了
newpoint
上的复制构造函数吗?
是的。
这是STL容器或C++构造函数的一个特性吗?
元素类型为T
的STL容器始终包含T
对象,而不是指向-T
的指针或对-T
的引用。当从T
类型的表达式初始化T
类型的对象时,执行复制或移动。
如果使用deque<reference_wraper<Point>>
,则deque将包含对Point
而不是Point
对象的引用,并且不会出现Point
的副本。很高兴你已经了解了这将如何导致问题。
Point
在函数末尾超出了作用域,但容器没有存储对这个临时的引用,所以没关系。
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 如果非动态变量被指针引用,何时超出范围?
- 为什么我的变量存在于其范围之外
- 变量超出范围后如何保留向量值?
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 在 c++ 中确定堆栈上的变量范围
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何从未知视图中声明范围::v3::View 变量
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 是否未定义将对函数范围变量的引用作为值返回
- 无法从另一个函数访问文件范围变量的内容
- 如何访问C 中的功能范围变量
- C++ 程序和范围变量
- 性能对象属性与范围变量
- 存储lambda函数,该函数将范围变量捕获为类成员以供重用
- 何时分配块范围变量
- 在 c++ 中声明一个全局范围变量 const