I am teaching myself c++ templates. I wrote the following code, and I am getting a weird error about a pointer being freed that wasn't allocated. I am guessing that something in my class template constructor isn't actually calling new on the int when I ask for an <int> type of this class. The code is being compiled and run automatically by CodeRunner for mac which I set up to use the clang++ compiler for c++ files.
#include <vector>
#include <iostream>
template <typename T>
class HeapVal
{
    public:
        HeapVal(T val) {ptr = new T(val);}
        ~HeapVal() {delete ptr;}
        T get() {return *ptr;}
    private:
        T* ptr;
};
int main(){
  std::vector< ::HeapVal<int> > vec;
  for(int i = 0; i < 1000; ++i){
    ::HeapVal<int> h(i);
    vec.push_back(h);
  }
  for(int i = 0; i < 1000; ++i){
    std::cout << vec[i].get() << std::endl;
  }
  return( 0 );
}
That code results in the following error either during compilation or execution (looks to me like a run-time kind of error).
Untitled(30214) malloc: *** error for object 0x7f82f24007c0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Run Command: line 1: 30214 Abort trap: 6           ./"$2" "${@:3}"
 
     
     
     
    