在内部类C ++中存储外部类对象时出错

时间:2018-06-13 15:08:38

标签: c++11 inner-classes circular-buffer

我正在实现环形缓冲区并遇到错误。在内部类(类迭代器)中存储外部类(类环)对象(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

0 个答案:

没有答案