我有一个快速接收数据包的应用程序,每次它接收数据包时,都会创建一些对象来处理它们,对于我正在使用的对象创建
std::unique_ptr
由于某些原因,它们似乎没有得到适当的清理,因为我可以看到应用程序的内存使用量不断上升。
我拍了一张快照,看看分配是从哪里来的,和预期的一样
下面是创建这些
PacketIn
和
PacketHeader
物体
while (!server->BufferEmpty()) {
std::shared_ptr<Stream> inStream = std::make_shared<Stream>();
std::vector<unsigned char> buffer = inStream->GetBuffer();
std::size_t n = server->receive(boost::asio::buffer(buffer),
boost::posix_time::milliseconds(-1), ec);
if (ec)
{
std::cout << "Receive error: " << ec.message() << "\n";
}
else
{
std::unique_ptr<IPacketIn> incomingPacket = std::make_unique<IPacketIn>();
incomingPacket->ReadHeader(inStream);
std::cout << "Received a buffer! ";
//std::cout.write(buffer, n);
std::cout << "\n";
incomingPacket.reset();
}
++packetsRead;
inStream.reset();
}
class IPacketIn {
public:
IPacketIn() {
m_packetHeader = std::make_unique<PacketHeader>();
}
~IPacketIn() {
m_packetHeader.reset();
}
void ReadHeader(std::shared_ptr<Stream> stream) {
m_packetHeader->ReadHeader(stream);
}
private:
std::unique_ptr<IPacketHeader> m_packetHeader;
};
包装头
class PacketHeader : public IPacketHeader {
public:
PacketHeader() {
}
~PacketHeader() {
}
void ReadHeader(std::shared_ptr<Stream> stream) override {
//m_uuid = stream->ReadUUID(10);
//m_timestamp = stream->ReadInt64();
//m_packetId = stream->ReadShort();
}
private:
std::string m_uuid;
//long m_timestamp;
//unsigned short m_packetId;
unique_ptr
但它是真的删除了它创建的内存,还是我遗漏了什么?
编辑
独特的
因为我试着用
new
delete
同样的问题。
我注意到问题发生在
类具有成员变量
std::string m_uuid;
long m_timestamp;
unsigned short m_packetId;
删除这些变量后,问题不再出现。
std::string uuid;
. 当这个出现在
包装头