我有一個模塊(dll/so),它導出一個工廠函數,它返回一個對象然後調用。然後使用模塊的接口(純虛擬)用戶可以創建不同的對象。所有對象的創建都是通過接口進行的,因此使用與我的模塊相關的運行時而不是應用程序運行時進行。禁止/重定向C++刪除?
由於分配發生在模塊內,所以刪除也需要,因爲如果應用程序與我的模塊有不同的運行時間,gpf/segfault時間。所以我有一個「釋放」成員,執行自我刪除。
void foo::release(void)
{
delete this;
}
一切工作正常,但它確實需要該模塊的用戶的行爲。
我的問題是:
- 是否有可能阻止別人發出直接刪除我的對象(或重定向到從我的模塊內存池刪除)?
- 如果不是作爲一個備份計劃,是否有可能在我的對象中檢測到這一點,所以我可以拋出一個斷言來強制良好的行爲?
E.G:
iFoo* foo = createFoo();
foo->release(); // Allowed and expected
delete foo; // Disallowed
您是否考慮過「製作私有析構函數」選項? – dave
選擇不行爲的用戶可以以許多方式打破你。讓您的界面易於使用,並且很難使用錯誤,不要太擔心惡意的意圖。 –
也許返回一個智能指針是爲了? http://en.wikipedia.org/wiki/Smart_pointer – amdn