我只是有一个简单的问题。在C ++中的函数中举一个例子:
queue<int> q1;
q1.push(1);
queue<int> q2=q1;
我知道“ q1”和“ q2”本身只是地址(就像一个指针,对吗?)可能存储在堆栈中,而实际数据存储在堆中。因此,如果我弹出q2,是否会出现1?
最佳答案
我知道“ q1”和“ q2”本身只是地址(就像一个指针,对吗?)可能存储在堆栈中,而实际数据存储在堆中。
假设在写时queue
为std::queue
:
std::queue<int> q1;
您实际上是在分配
std::queue
对象。对象是存储器中的空间区域。在这种特殊情况下,使用自动内存分配q1
(以及q2
)。这意味着当相应符号超出范围时将被释放。因此,否:
q1
和q2
不是简单的指针。指针通常以T*
类型声明(对于任何T
),此处不存在。因此,如果我弹出q2,是否会出现1?
不,不会。
std::queue
的copy constructor,称为:std::queue<int> q2 = q1;
将执行deep copy,导致两个不相关的
std::queue
。这意味着空间区域不在两个对象q1
和q2
之间共享。如果您愿意,可以使用如下引用:
std::queue<int> q1;
std::queue<int>& q2 = q1;
在上面的示例中,
q1
和q2
引用相同的对象。关于c++ - 在C++中,对象(例如队列, map )的名称是引用(或指针)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20256092/