Я попытался переключить код 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()
??
Я представляю placement new
действительно проблематично, потому что TObject
есть ожидания о распределении памяти, которое new
удовлетворяет (потому что RTL C ++ Builder внутренне направляет подпрограммы памяти C / C ++ в подпрограммы Delphi RTL в проектах VCL), но который placement new
не.
Других решений пока нет …