我只是有一个简单的问题。在C ++中的函数中举一个例子:

queue<int> q1;
q1.push(1);
queue<int> q2=q1;


我知道“ q1”和“ q2”本身只是地址(就像一个指针,对吗?)可能存储在堆栈中,而实际数据存储在堆中。因此,如果我弹出q2,是否会出现1?

最佳答案

我知道“ q1”和“ q2”本身只是地址(就像一个指针,对吗?)可能存储在堆栈中,而实际数据存储在堆中。


假设在写时queuestd::queue

std::queue<int> q1;


您实际上是在分配std::queue对象。对象是存储器中的空间区域。在这种特殊情况下,使用自动内存分配q1(以及q2)。这意味着当相应符号超出范围时将被释放。

因此,否:q1q2不是简单的指针。指针通常以T*类型声明(对于任何T),此处不存在。




  因此,如果我弹出q2,是否会出现1?


不,不会。 std::queuecopy constructor,称为:

std::queue<int> q2 = q1;


将执行deep copy,导致两个不相关的std::queue。这意味着空间区域不在两个对象q1q2之间共享。

如果您愿意,可以使用如下引用:

std::queue<int> q1;
std::queue<int>& q2 = q1;


在上面的示例中,q1q2引用相同的对象。

关于c++ - 在C++中,对象(例如队列, map )的名称是引用(或指针)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20256092/

10-11 01:09