そんなことにはまるんだってやつ C++編その1

久々にビビるレベルの内容で本当にわからなくて長時間ハマったので記念にメモ。本当にポインタがわか これがコンパイルエラーで小一時間ハマったんだけど、ismyarrayじゃなくてmyarray*なのでオーバーロードした[]が呼ばれてるわけじゃないので当然…ポインタに対して添字演算しているのでis[0]はそのままその位置を返すな。はい。

#include <iostream>

template<typename T>
struct myarray
{
    T *a;
    size_t length;

    myarray(size_t n) {
        a = new T[n];
        length = n;
    }

    T & operator[](size_t i)
    {
        return a[i];
    }

};

int main(int argc, char const* argv[])
{
    myarray<int> *is = new myarray<int>(5);
    is[0] = 1;
    std::cout << "i: " << is[0] << std::endl;
    return 0;
}