IMovable
は、あなたがそれを示したように、それ自身の抽象メソッドを持たない抽象クラスではありません。抽象型へのポインタであるデータメンバはカウントされません。いずれの場合においても
は、仮想デストラクタを必要と
MovementPath
あなたの質問に、答えるために、その後、
IMovable
かかわらず、実際に何であるか、それを入力するのは、正しい具体的なデストラクタを呼び出すために
delete movementPath
を呼び出すことができます。例えば
:
class MovementPath
{
...
public:
virtual ~MovementPath() { ... }
...
};
class IMovable {
protected:
MovementPath *movementPath;
public:
IMovable() : movementPath(0) {}
virtual ~IMovable() { delete movementPath; }
void setMovementPath(MovementPath *newPath) {
// whether or not you need to 'delete movementPath' here
// depends on your particular requirements...
movementPath = newPath;
}
};
class MyMovementPath : public MovementPath
{
...
public:
~MyMovementPath() { ... }
...
};
class MyMovable : public IMovable
{
...
public:
MyMovable() : IMovable() { ... }
~MyMovable() { ... }
...
};
MyMovementPath *path = new MyMovementPath;
MyMovable *movable = new MyMovable;
movable->setMovementPath(path);
...
delete movable; // <-- will delete the path as well...
私は質問を得ることはありません。 MovementPathは基本抽象クラスですか? – mkmostafa
あなたは多分、3回のルールに違反したでしょう。所有権セマンティクスを持つ生ポインタの使用をやめてください。もはや1996年ではない。 –
となります。非生の型を認識していませんでした。 – Karlovsky120