///////////////////////////////////////////////////////////////////////////////
+DecoSchematic::~DecoSchematic()
+{
+ if (was_cloned)
+ delete schematic;
+}
+
+
ObjDef *DecoSchematic::clone() const
{
auto def = new DecoSchematic();
NodeResolver::cloneTo(def);
def->rotation = rotation;
- /* FIXME: This is not ideal, we only have a pointer to the schematic despite
- * not owning it. Optimally this would be a handle. */
- def->schematic = schematic; // not cloned
+ /* FIXME: We do not own this schematic, yet we only have a pointer to it
+ * and not a handle. We are left with no option but to clone it ourselves.
+ * This is a waste of memory and should be replaced with an alternative
+ * approach sometime. */
+ def->schematic = dynamic_cast<Schematic*>(schematic->clone());
+ def->was_cloned = true;
return def;
}