簡體   English   中英

即使對指針調用,dynamic_cast也可能引發std:bad_cast拋出什么?

[英]What could make dynamic_cast start throwing std:bad_cast even if invoked on pointers?

我的行為很奇怪。 無法在MCVE中找出問題,但在我進行調查時會得到解決。

我有一個基於CPPUNIT庫和Qt的程序,可運行約900個單元測試。 該程序使用QtCreator部署在Android上。 它與〜80個庫鏈接,每個庫都定義了一些測試。

在PC上,程序可以完美運行。 在Android上部署時,當我運行它時,在運行了一些測試(〜100個)之后,我在測試中完成的每個dynamic_cast都開始收到std::bad_cast異常。 我看到它來自我在指針而不是引用上調用dynamic_cast地方。 根據文檔 ,只有在引用上調用dynamic_cast時才會引發std::bad_cast

void validate( ParentTestHelper& testHelper )
{
    const ChildTestHelper* child = dynamic_cast<const ChildTestHelper*>( &testHelper );
    ...
}

但是,我的代碼拋出了std::bad_cast

如果我只運行執行dynamic_cast的測試,那么它將起作用。 它只會在其他命令之后運行時才會失敗...並且手動一個接一個地運行它們不會讓我重現該問題。 導致此問題的地方一定有些怪異,我仍在調查中。

如果有人知道為什么在指針上調用dynamic_cast會引發std::bad_cast ,則可能會有所幫助...

經過大量調查,我發現問題的根本原因是我將自定義方面應用於std::cout 在某個時候,它在boost::posix_time::ptimeoperator<<進行use_facet時,使boost代碼拋出std::bad_cast boost::posix_time::ptime

請參閱另一個主題,希望有人會解釋原因: 為什么對std :: cout的boost :: posix_time :: time_facet產生誤解,會使我的應用崩潰?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM