抽象クラス IPacket があります。
/*
* Represents an abstract network packet.
*/
class IPacket
{
public:
virtual void read(...) = 0;
virtual void write(...) = 0;
virtual int getID() const = 0;
};
そして、私はポインタを次のように返したいです(そしてそうしています):
class PacketMedium
{
/*!
* Returns a pointer to the next pending packet or NULL if there are no packets pending.
* \note The object must deleted when you are finished with it.
*/
IPacket* receivePacket();
};
明らかに、これは悪い習慣です。呼び出し元は、それ自体では割り当てられていないポインターを削除する必要があります。私が信じている慣例は、スマートポインターを使用することです。
class PacketMedium
{
public:
std::unique_ptr<IPacket*> receivePacket();
};
しかし、これはライブラリ コードであるため、スマート ポインターは非現実的ですが、私はそれらを回避したいと考えています。
私の最良の選択肢は何ですか?
助けてくれてありがとう:)
編集:これは以前に尋ねられ、非常に良い答えが与えられましたが、それらはすべてスマートポインターを示唆しているか、ヒープに割り当てていないだけです。それが抽象的であることを考えるとIPacket
、スタック割り当ては機能しません。