如何正確理解boost any的設計?

時間 2021-05-31 13:26:45

1樓:叛逆者

這件事情和any完全沒有關係,即便沒有any,也非常容易讓你的類掛掉。只需要:

myclass c0;

myclass c1(c0);

或者myclass c0;

myclass c1;

c0 = c1;

原因就在於,你有預設構造,卻沒有拷貝構造和operator=。(C++11的話還有移動構造和移動的operator=)。這幾個往往是同時出現的,寫了乙個就要考慮是不是應該寫其他幾個。

詳見Effective C++第二章。

2樓:

boost::any a1(ms);

這句話會呼叫myclass類的預設拷貝建構函式,生成物件ms的完全相同的副本傳遞給boost::any,然後這個副本析構後會把ms物件申請的那段記憶體釋放了。這樣當ms物件析構時會導致同一段記憶體被兩次釋放。

題主需要自己定義乙個拷貝建構函式,類成員要深拷貝,避免上文提到的釋放同一段記憶體被兩次釋放的問題。具體請參見輪子哥

@vczh 的答案中的兩個寫法(拷貝構造和移動構造)

如何正確理解半衰期?

李正陽 假設世界上分布著1000個原子,每個原子每過1秒都有50 的概率衰變,那麼 1秒後 衰變了接近500個原子,還剩500個原子2秒後 還剩250個原子 3秒後 還剩125個原子 以此類推,1秒就是這個原子的半衰期。也可以這麼理解,連續投擲1000枚硬幣,留下投擲結果為正面的硬幣,去掉反面的硬幣...

如何正確理解法不責眾?

王二 任何法律條款中都沒有法不責眾這種說法,大家的俗語而已。任何法律的條條框框在那裡,執法者要做的是讓違法者對號入座,那麼就存在了這麼乙個現象,違法的很多,對號入座很難,且不利於穩定,於是就糊弄一下,這樣大家都滿意,當然這限定治安或者輕微刑事案件。對於重大案件,那是不可能的,只要有證據,弄乙個是乙個...

如何正確理解刑罰的目的?

柒喜 要理解刑罰的目的就應該懂得刑罰的組成部分,刑罰主要由兩部分組成 報應刑和預防刑。報應刑根據犯罪行為的法益侵害性和可譴責性進行裁量,預防刑主要從人身危險性進行裁量。刑罰是由國家制定出來的,是由國家強制力作為保障實施,以維護國家統治為最終目的。所以,刑罰的目的按照層次進行劃分,可以說其根本目的是為...