我有一個模板類myFoo,它存儲類型T的「東西」,它可以是原始的或指向複雜類型的指針。當myFoo被刪除時,我想釋放所有存儲的相關內存。這意味着我需要調用每個存儲指針的delete,但是我最終也可能會在一個基元上調用delete。這安全嗎?我可以在基元上調用刪除嗎?
我已經在下面添加了myFoo的草圖以更好地突出顯示發生了什麼。我不確定析構函數的行爲是否定義良好。
template<class T>
class myFoo
{
public:
myFoo(int size)
{
size_ = size;
T* foo = new T[size_];
}
void addFoo(T tmp, int index)
{
foo[index] = tmp;
}
virtual ~myFoo()
{
for(int i=0; i < size_; i++)
{
delete foo[i];
}
delete [] foo;
}
private:
int size_;
T* foo;
}
難道你不能專注於指針嗎? – chris 2012-07-25 05:44:08
正如你寫的,至少在語義上你的代碼對任何*類型'T'都沒有意義:你在混合所有權責任,而這個類將是一個可用性,可讀性和可維護性的噩夢。簡而言之,它不應該是'你'擔心'T'是什麼,客戶應該自己清理(或者使用智能指針)。 – 2012-07-25 05:48:00
@KerrekSB:我正在寫各種數據庫。我想插入數據到它。數據庫對我存儲在其中的東西的內存擁有所有權是有道理的。否則,我需要從外部管理數據庫中的所有數據。這有點「wtf ??」如果我按照你的建議去做。 – Daniel 2012-07-25 05:50:53