[英]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::ptime
的operator<<
進行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.