我在教自己的c + +模板。我寫了下面的代碼,並且我得到了一個有關正在釋放的指針未被分配的奇怪錯誤。我猜我在我的類模板構造函數中的某個東西實際上並沒有在int
上調用new
,當我要求這個類的<int>
類型時。該代碼正在編譯並自動運行CodeRunner
for mac,我設置爲使用clang++
編譯器爲c++
文件。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}"
這可能很好地解釋你的問題:http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three – chris 2012-03-21 22:32:10