Я помню, как раньше встречался этот концепт, но не могу найти его сейчас в Google.Как подключить boost :: shared_ptr (или другой умный указатель) к счетчику счетчика родителя объекта?
Если у меня есть объект типа А, который непосредственно встраивает объект типа B:
class A {
B b;
};
Как я могу иметь смарт-указатель на B
, е. г. boost::shared_ptr<B>
, но используйте номер ссылки A
? Предположим, что экземпляр A
сам распределяется по кучам. Я могу безопасно получить его общий счет, используя, скажем, enable_shared_from_this
.
Почему вы хотите это сделать? –
@Marcelo Cantos, примером может служить обработка сообщений по TCP-соединению: для чтения из сокета вам необходимо предоставить непрерывный буфер, но вы хотите иметь возможность работать с дискретными сообщениями (ставить их в очередь, передавать их). Таким образом, вы можете делать лишние копии сообщений (занимает в два раза больше памяти, может вызвать фрагментацию), или вы можете пересчитать буфер в каждом shared_ptr каждого сообщения (если каждое сообщение является POD и отображается непосредственно в какое-то место в буфере). Таким образом, буфер будет удален (или возвращен в пул и т. Д.), Когда shared_ptr последнего сообщения будет уничтожен. –
PS То есть, если вы не можете держать shared_ptr в буфере в сообщении из-за того, что он должен быть типом POD. –