有一个获取元素的函数,另一个用于删除它:
typedef queue<MyClass> MyQueue;
MyQueue q;
q.push(MyClass(42));
// ...
MyClass const& rx = q.front();
rx.print();
MyClass x = q.front(); // Copies the front element to a fresh object
q.pop(); // From this point, rx is a dangling reference
assert(x == MyClass(42));
Run Code Online (Sandbox Code Playgroud)
基本原理:如果只有一个pop函数返回前面的元素,则不可能获得对前面元素的引用,因为它已经从队列中删除了.如果您只是想在丢弃它之前阅读一个巨大的元素,那么您肯定不希望您的代码执行复制.
编辑:一个更基本的原因是拥有两个函数意味着用户负责制作副本.假设只有一个pop函数:如果复制构造函数(内部pop)抛出异常会发生什么?(参见@Steve Jessop的评论)
| 归档时间: |
|
| 查看次数: |
12121 次 |
| 最近记录: |