我有一个子类知道发送父类的对象类型,但我无法弄清楚如何创建它,以便父级可以保留对象而不在父类构造函数中创建额外的副本。
class Thing {
...some stuff...
};
class Parent {
private:
Thing & thing;
public:
Parent(Thing & in_thing):thing(in_thing);
};
class Child : public Parent {
public:
// Does my Thing object get created on the stack here and therefor I can't keep a reference or pointer to it in the parent class?
Child():Parent(Thing()){};
}
正确的方法是什么?
我不知道如何尝试这样做以确定它是否正常,因为它可能会在一段时间内正常工作,即使内存无效也无法使用。
答案 0 :(得分:1)
不是在堆栈内存中创建对象,而是使用堆内存创建一个对象。父母可以拥有该对象。
class Parent {
private:
std::unique_ptr<Thing> thing;;
public:
Parent(Thing* in_thing): thing(in_thing);
};
和
class Child : public Parent {
public:
Child():Parent(new Thing()){};
}
使用指针还允许Child
创建Thing
的子类型。有时你需要它。
class ChildThing : public Thing { ... };
class Child : public Parent {
public:
Child():Parent(new ChildThing()){};
}