這是我的代碼示例:安全放置新的和明確的析構函數調用
template <typename T> struct MyStruct {
T object;
}
template <typename T> class MyClass {
MyStruct<T>* structPool;
size_t structCount;
MyClass(size_t count) {
this->structCount = count;
this->structPool = new MyStruct<T>[count];
for(size_t i=0 ; i<count ; i++) {
//placement new to call constructor
new (&this->structPool[i].object) T();
}
}
~MyClass() {
for(size_t i=0 ; i<this->structCount ; i++) {
//explicit destructor call
this->structPool[i].object.~T();
}
delete[] this->structPool;
}
}
我的疑問是,這是一種安全的方式呢?在某些情況下我會犯一些隱藏的錯誤嗎?它是否適用於每種類型的對象(POD和非POD)?
請注意,你的代碼是不例外安全如果其中一個構造函數失敗,會泄漏對象和內存。 – avakar 2010-06-08 06:32:59