iters
Сергей Маринкевич 5 months ago
parent 0912566c5f
commit f994303cb5

@ -13,5 +13,5 @@ public:
virtual void linkChild(const NodePtr& child) = 0;
virtual void unlinkParent() = 0;
virtual LinkPtr getLink() = 0;
virtual NodePtr getSelf() = 0;
virtual NodePtr getNode() = 0;
};

@ -11,7 +11,7 @@ class LazyLinkMixin : public virtual ILinkMixin {
public:
void linkChild(const NodePtr& childNode) override {
LinkPtr childLink = childNode->getLink();
childLink->setParent(getSelf());
childLink->setParent(getNode());
getLink()->addChild(childNode);
}
@ -27,7 +27,7 @@ public:
LinkPtr parentLink = parent->getLink();
parentLink->removeChild(getSelf());
parentLink->removeChild(getNode());
getLink()->setParent(nullptr);
}
@ -41,13 +41,12 @@ public:
}
protected:
virtual NodePtr getShared() = 0;
NodePtr getSelf() override { return getShared(); }
virtual NodePtr getNode() = 0;
private:
void lazyInit() {
if (!link_) {
link_ = std::make_shared<TLink>(getSelf());
link_ = std::make_shared<TLink>(getNode());
}
}

@ -5,18 +5,15 @@
class BaseNode : public INode,
public LazyLinkMixin<OneToManyLink>,
public std::enable_shared_from_this<BaseNode> {
public std::enable_shared_from_this<INode> {
public:
//using LazyLinkMixin<OneToManyLink>::linkChild;
//using LazyLinkMixin<OneToManyLink>::unlinkParent;
//using LazyLinkMixin<OneToManyLink>::getLink;
BaseNode(std::string name) : name_(std::move(name)) {}
const std::string& name() const override { return name_; }
~BaseNode() {
std::cout << "--- Destructor called for: " << name_ << "\n";
std::cout << "--- Base destructor called for: " << name_ << "\n";
}
protected:
NodePtr getShared() override {
NodePtr getNode() override {
return shared_from_this();
}
std::string name_;

@ -2,11 +2,10 @@
#include "nodes/BaseNode.h"
#include <iostream>
class SimpleNode :
public BaseNode {
class SimpleNode : public BaseNode {
public:
~SimpleNode() {
std::cout << "--- Destructor called for: " << name_ << "\n";
std::cout << "--- Simple destructor called for: " << name_ << "\n";
}
SimpleNode(std::string name) : BaseNode(std::move(name)) {}
};

@ -1,4 +1,4 @@
#include "nodes/SimpleNode.h" // Путь изменен
#include "nodes/SimpleNode.h"
#include <iostream>
void printTree(const NodePtr& startNode, int indent = 0) {
@ -14,7 +14,6 @@ void printTree(const NodePtr& startNode, int indent = 0) {
int main() {
std::cout << "Entering main scope...\n\n";
// Начало новой области видимости
{
auto root = std::make_shared<SimpleNode>("Root");
auto child2 = std::make_shared<SimpleNode>("Child2");
@ -43,7 +42,7 @@ int main() {
std::cout << "\nTree after scope out:\n";
printTree(root);
} // <--- КОНЕЦ ОБЛАСТИ ВИДИМОСТИ
}
std::cout << "\nExited main scope. All smart pointers destroyed.\n";

Loading…
Cancel
Save