【发布时间】:2016-02-19 10:40:33
【问题描述】:
假设我们有以下代码:
void foo()
{
Point newpoint(...);
dq.push_back(newpoint);
...
return dq;
}
假设dq 是双端队列,Point 是某个类。
在C 中,当foo() 结束时,newpoint 就消失了,如果它被传递给一个数组,例如,它会变成垃圾,但我在c++、dq 看到了这一点当它超出foo() 的范围时,它实际上保留了它,它是否真的在newpoint 上调用了一个复制构造函数? newpoint 到底发生了什么?这是 STL 容器或 C++ 的构造函数的特性吗?
【问题讨论】:
-
是的,在这种情况下,STL 容器通常会执行复制。
-
更大的问题是您如何设法从
void foo()返回deque:) -
@Praetorian 哈哈,哎呀。
-
newpoint消失了,但这没关系,因为newpoint没有存储在双端队列中,只是另一个点恰好具有相同的值。在 C 中也是如此。