Общий указатель из объекта в C++
Общий указатель на тот же объект без второго блока управления позволяет вернуть enable_shared_from_this.
Класс наследует этот шаблон и вызывает
shared_from_this только если уже
управляется shared_ptr. Запишем
узел со счетчиком и вернем копию указателя
из метода:
#include <iostream>
#include <memory>
class Node : public std::enable_shared_from_this<Node> {
public:
int tag = 0;
std::shared_ptr<Node> link() {
return shared_from_this();
}
};
int main() {
std::shared_ptr<Node> head = std::make_shared<Node>();
head->tag = 5;
std::shared_ptr<Node> mirror = head->link();
std::cout << mirror->tag << "\n";
return 0;
}
Сделайте класс Cell с
enable_shared_from_this и полем
id. Метод self возвращает
shared_ptr<Cell>. Создайте
объект через make_shared,
получите второй shared_ptr из
self и выведите id.