我正在開發一個不使用異常的項目,並且應該保持這種狀態。 爲了使用我自己的內存管理器,我重載了(overrid會更準確一些)new操作符。在我的內存管理器中,如果分配失敗 - 返回NULL。 現在,雖然新運算符返回NULL,但構造函數正在調用,然後我得到一個seg故障,因爲我沒有分配內存。 我想要的功能是,如果新的操作符返回NULL,那麼不應該調用構造函數(並且之後我會檢查對象是否成功初始化)。運算符新重載C++,無例外地處理故障
我希望它的工作是這樣的:
myObject = new object(...);
if (NULL == myObject)
printf("error")
else
do something
謝謝!
的['操作者new'和'操作者新的[]'功能](http://en.cppreference.com/w/cpp/memory/new/operator_new )只分配內存,當你使用'new'運算符時,它是編譯器創建代碼以調用可能的構造函數。返回一個空指針('nullptr'或者''0)是失敗時的正確行爲。 –
新對象(...)分配內存並調用構造函數。我只想在分配成功時調用構造函數。我知道這是我所需要的nothrow選項,但是如何在超載時做出這樣的事情? – user3445972
@JoachimPileborg只有當你通過'noexcept'或'throw()'聲明你的分配函數爲非拋出時,請參閱[basic.stc.dynamic.allocation] p3 - 當我禁用異常時,我不清楚這是否是暗示的。 – dyp