2011-06-28 14 views
2

我有一個類,這取決於應用程序的狀態和用戶選項可能並不總是能夠以任何有意義的狀態存在。如何在C++中不存在對象時清除它?

當對象不存在時,清除它的最好方法是什麼?

兩個想法,我認爲到目前爲止,爲什麼我不相信他們是不是答案:

  1. 智能指針設置爲NULL當對象不存在,這發出了一個明確的這裏沒有對象的消息,但是我已經讀過使用'new'的動態內存分配應該是異常而不是C++中的規則,它也阻止我能夠通過引用來傳入其他函數(因爲指針可能並不總是指向一個對象)。
  2. 對象中的一個布爾標誌,當它被設置時,會導致調用的任何方法拋出異常。這需要在每種方法中進行檢查,並且感覺像是一種雜食。我也相信最佳實踐是all objects that exist should be valid,我們不應該調用驗證(或類似)函數,因爲對象的存在意味着它已經是有效的並且準備好調用它的方法。
+3

你看過Boost :: Optional嗎? – StevieG

回答

3

我想你想NULL Object pattern

您從您的基類繼承了它的「空」實現。所以它具有與主對象相同的方法和屬性,但不做任何事情。然後有一個這樣的例子作爲一個常量。只要你的變量不處於可用狀態,就將它分配給空對象。如果它被使用,會發生什麼壞的,你可以檢查它是否等於你的空對象實例。

0

使用共享庫,當您使用dlsym()導出符號時,如果導出成功,則該對象存在,否則該對象不存在。

+4

如果你只有一把錘子,一切看起來都像釘子。 –

+0

特定平臺... – DevSolar

6

boost::optional<T>。它正是這個原因存在的。

+3

我喜歡boost ::可選。如果可能,我會娶她。 –