Я учу себя шаблонам с ++.Я написал следующий код и получаю странную ошибку об освобождении указателя, который не был выделен.Я предполагаю, что что-то в моем конструкторе шаблонов классов на самом деле не вызывает new
на int
, когда я запрашиваю тип <int>
этого класса.Код компилируется и запускается автоматически CodeRunner
для Mac, который я настроил на использование компилятора clang++
для c++
файлов.
#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 );
}
Этот код приводит к следующей ошибке либо во время компиляцииили выполнение (выглядит как ошибка во время выполнения).
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}"