我只是有一个简单的问题。举个例子,在C++的一个函数中:
queue<int> q1;
q1.push(1);
queue<int> q2=q1;
我知道“q1”和“q2”本身只是地址(就像一个指针,对吗?)可能存储在堆栈中,而实际数据存储在堆中。那么如果我 pop q2,会出现 1 吗?
最佳答案
I know "q1" and "q2" themselves are just addresses(like a pointer,am I right?)possibly stored on stack while the real data is store on heap.
假设 queue
为 std::queue
,当你写:
std::queue<int> q1;
您正在有效地分配一个 std::queue
对象。对象是内存中的一个空间区域。在这种特殊情况下,q1
(以及q2
)是使用自动内存分配的;这意味着当相应的符号超出范围时它将被释放。
因此,不:q1
和q2
不是简单的指针。指针通常用 T*
类型声明(对于任何 T
),此处不存在。
So if I pop q2, will 1 appear?
不,不会。 copy constructor std::queue
,调用于:
std::queue<int> q2 = q1;
将执行 deep copy ,导致两个不相关的 std::queue
。这意味着空间区域在两个对象 q1
和 q2 之间不共享
。
如果你想这样做,你可以使用这样的引用:
std::queue<int> q1;
std::queue<int>& q2 = q1;
在上面的例子中,q1
和q2
指的是同一个对象。
关于c++ - 在C++中,对象(如队列、映射)的名称是引用(还是指针)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20256092/