我有一个抽象类,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();
};
但由于这是库代码,因此智能指针是一个 nono,尽管我宁愿避免使用它们。
我最好的选择是什么?
谢谢你的帮助 :)
编辑:之前有人问过这个问题,并且给出了很好的答案,尽管它们都建议使用智能指针,或者只是不在堆上分配。鉴于这IPacket
是抽象的,堆栈分配将不起作用。