2013-05-20 79 views
0

我試過使用new來切換一些C++ Builder 2010代碼來使用boost::make_shared<>,如下所示。boost :: make_shared和C++ Builder VCL對象

老:

boost::shared_ptr<TStringList> l(new TStringList()); 

新:

boost::shared_ptr<TStringList> l(boost::make_shared<TStringList>()); 

l->Add("foo"); //dies here 

舊的代碼工作,但新的代碼去世時,我嘗試使用指針(AV,或只是掛起)。 我以前成功使用過make_sharedshared_ptr,但從未與TObject後代一起使用過。這是一個已知的問題 - 可能與make_shared使用放置new()的方式有關嗎?

回答

1

我想象placement new確實是有問題的,因爲TObject大約有內存分配預期其new滿足(因爲C++ Builder的RTL內部路線C/C++內存例程在VCL項目德爾福RTL程序),但placement new沒有。

+0

奇怪的事情回來咬你。三年之後,我絆倒了完全相同的問題,Google和StackOverflow讓我回到了一個我忘記的問題,我甚至問過;) – Roddy