假设我们有以下代码:
void foo()
{
Point newpoint(...);
dq.push_back(newpoint);
...
return dq;
}
假设
dq
是双端队列,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>>
,则双端队列将包含对Point
的引用,而不是Point
对象,并且不会出现Point
的副本。很好,您已经了解这将如何导致问题。
关于c++ - 关于将变量传递到STL容器而不会超出范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33767456/