make_shared
более производительный, чем отдельный вызов new
и создание shared_ptr
, потому что make_shared
выделяет пространство для счетчика ссылок и слабого счетчика в том же блоке памяти, что и экземпляр объекта клиента (фактически давая shared_ptr
большинство преимуществ производительности intrusive_ptr
).
enable_shared_from_this
дает общий указатель без ссылки на какой-либо общий указатель. Поэтому такие вещи, как ссылка и слабый счет, должны быть как-то доступны изнутри объекта клиента. Следовательно, было бы разумно, чтобы enable_shared_from_this
вызывал навязчивый счет, аналогичный make_shared
.
Однако я понятия не имею, как можно реализовать что-то подобное (и я не уверен, что буду следить за тем, что там происходит, даже если посмотрю на фактический источник).
Тогда имеет ли смысл (по соображениям производительности) пометить мой класс enable_shared_from_this
, если я знаю, что он будет использоваться только как shared_ptr
, а не как необработанный объект?