объекты boost :: make_shared и C ++ Builder VCL

Я попытался переключить код C ++ Builder 2010 с помощью new использовать 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() ??

0

Решение

Я представляю placement new действительно проблематично, потому что TObject есть ожидания о распределении памяти, которое new удовлетворяет (потому что RTL C ++ Builder внутренне направляет подпрограммы памяти C / C ++ в подпрограммы Delphi RTL в проектах VCL), но который placement new не.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]