0

我尝试使用newto切换一些 C++Builder 2010 代码boost::make_shared<>,如下所示。

老的:

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()

4

1 回答 1

1

我想这placement new确实是有问题的,因为对满足的TObject内存分配有期望new(因为 C++Builder 的 RTL 在内部将 C/C++ 内存例程路由到 VCL 项目中的 Delphi RTL 例程),但placement new事实并非如此。

于 2013-05-21T03:18:40.190 回答