【问题标题】:boost::make_shared and C++Builder VCL objectsboost::make_shared 和 C++Builder VCL 对象
【发布时间】:2013-05-20 12:13:57
【问题描述】:

我尝试将一些使用new 的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_shared 和shared_ptr,但从来没有使用过TObject 的后代。这是一个已知问题吗 - 可能与 make_shared 使用放置 new() 的方式有关??

【问题讨论】:

    标签: c++ boost c++builder vcl make-shared


    【解决方案1】:

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

    【讨论】:

    • 奇怪的事情又回来咬你了。三年过去了,我遇到了完全相同的问题,谷歌 - 和 StackOverflow - 引导我提出一个我什至忘记问的问题;)
    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    相关资源
    最近更新 更多