我正在实现环形缓冲区并遇到错误。在内部类(类迭代器)中存储外部类(类环)对象(m_ring)的引用是什么意思,当我删除引用(&)时,程序正确编译但崩溃。请解释发生了什么。(参见Ring.h中的评论)抱歉英语不好。
INSERT INTO cpy (
first_name
, last_name
, hire_dt
) VALUES (
'Thor'
, 'son of Odin'
, '2000-01-01'
;
驱动程序:
// Ring.h
#ifndef RING.H
#define RING.H
#include <iostream>
using namespace std;
template<class T>
class ring {
unsigned int m_size;
int m_pos;
T *m_values;
public:
class iterator;
public:
ring(unsigned int size) : m_size(size), m_pos(0)
{
m_values = new T[m_size];
}
~ring()
{
delete[] m_values;
}
void add(const T &val)
{
m_values[m_pos] = val;
m_pos++;
m_pos %= m_size;
}
T& get(int pos)
{
return m_values[pos];
}
iterator begin()
{
return iterator(0, *this);
}
iterator end()
{
return iterator(m_size, *this);
}
};
template<class T>
class ring<T>::iterator {
int m_pos;
ring &m_ring; // Removing & gives garbage output.
public:
iterator(int pos, ring& aRing) : m_pos(pos), m_ring(aRing){}
bool operator!=(const iterator &other) const
{
return other.m_pos != m_pos;
}
iterator &operator++(int)
{
m_pos++;
return *this;
}
iterator &operator++()
{
m_pos++;
return *this;
}
T &operator*()
{
// return m_ring.m_values[m_pos];
return m_ring.get(m_pos);
}
};
#endif // RING
我还观察到删除~ring()(析构函数)会导致输出正确。
预期产出:
4个
2个
3
4个
2个
3