c++ - 在C++中,对象(如队列、映射)的名称是引用(还是指针)?

标签 c++ variables pointers reference

我只是有一个简单的问题。举个例子,在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.

假设 queuestd::queue ,当你写:

std::queue<int> q1;

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

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


So if I pop q2, will 1 appear?

不,不会。 copy constructor std::queue,调用于:

std::queue<int> q2 = q1;

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

如果你想这样做,你可以使用这样的引用:

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

在上面的例子中,q1q2指的是同一个对象。

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

相关文章:

c++ - 为什么指针在函数转换期间会改变自身?

c++ - 选择值/指针/引用是否有一个规则或优先级?

python - 使用pybind11和pytorch在C++中运行python时出现无效的指针错误

c++ - Windows 上的蓝牙低功耗低速率?

c++ - 在 distcc 中禁用某些警告

php - 如何为外部 javascript 文件设置变量?

c++ - CPP 线程中的嵌入式 Ruby 崩溃

最终好奇的Java未初始化变量

c++ - 声明一个变量内联赋值C++

c++ - 如何处理模板类中的指针?