環境はViausl Studio 2015 communityです。

以下のようなファイルと、

    #include "intRect.hpp"

    int main()
    {
      std::cout << "declare..." << std::endl;
      intRect rectangle;

      rectangle.setSize(10, 5);


      std::cout << "set value..." << std::endl;
      // set value
      for (int x = 0; x < 10; x++)
      {
        for (int y = 0; y < 5; y++)
        {
          rectangle.setValue(x, y, x + y);
        }
      }

      std::cout << "printing..." << std::endl;
      // print value
      for (int x = 0; x < 10; x++)
      {
        for (int y = 0; y < 5; y++)
        {
          rectangle.printValue(x, y);
        }
      }
      return 0;

    }

以下のようなインクルードファイルがあるのですが、

    #ifndef INTRECT_HPP
    #define INTRECT_HPP

    #include <memory>
    #include <iostream>

    struct intRect
    {
      int width = 0;
      int height = 0;
      int size = 0;

      //std::unique_ptr<int[]> intrect_body = nullptr;
      std::unique_ptr<int> intrect_body;

      void setSize(const int arg_width, const int arg_height)
      {
        width = arg_width;
        height = arg_height;

        intrect_body.reset(new int(width * height));
      }

      void setValue(const int& arg_x, const int& arg_y, const int& arg_value)
      {
        if (width == 0 || height == 0)
        {
          return;
        }

        int position = arg_y * width + arg_x;

        if (position > width * height)
        {
          return;
        }

        intrect_body.get()[position] = arg_value;
      }

      void printValue(const int& arg_x, const int& arg_y)
      {

        if (width == 0 || height == 0)
        {
          return;
        }

        int position = arg_y * width + arg_x;


        if (position > width * height)
        {
          return;
        }

        std::cout << "value at position (" << arg_x << ", " << arg_y << ") is " << intrect_body.get()[position] << std::endl;

      }


    };


    #endif 

以下の画像のように、止まるところがおかしなところで、勝手にリソースが解放されてしまっているようにも見えるのですが、原因がわかりません。
アウトプットには
Exception thrown at 0x0F6FB4E4 (ucrtbased.dll) in smapowraptest.exe: 0xC0000005: Access violation reading location 0x000003B2.
と表示されています。
Exception thrown at 0x775A324F (ntdll.dll) in smapowraptest.exe: 0xC0000005: Access violation reading location 0x00000009.
と表示されることもあり、挙動がよくわからない状態になります。

MSYS2でg++でコンパイルして流すと、正常に動くのですが、何か間違っているのでしょうか。

画像の説明をここに入力