Я создал программу для выполнения процедуры входа в систему, и она прекрасно работала, но когда я вернулся и заметил, что динамически размещаемая переменная (объект) не удаляется, я исправил это и обнаружил, что моя программа работает очень медленнозанимает около 3 секунд за каждый шаг, когда он был ранее мгновенным.
Я скомпилировал в режиме отладки, и первым, что я заметил, были все вызываемые ошибки abort ().
Затем я запустил профиль в инструментах Chrome и дал такой результат.
Это трассировка стека,
_WoWAuthHandler::handleServerData(WoWPacket*)
_WoWPacket::~WoWPacket()
_Packet::~Packet()
_Buffer::~Buffer()
_Buffer::clear()
Это код для ~ Buffer () (Не мой код)
Buffer::~Buffer() {
clear();
}
Buffer :: clear ()
void Buffer::clear() noexcept {
buffer.clear();
readOffset = 0;
writeOffset = 0;
}
Буфер является базовым std :: vector, но std :: vector.clear () не включен втрассировка стека и, похоже, не является проблемой.
Я изменил ~ Buffer (), чтобы он был просто пустой функцией, и запустил другой профиль. Однако, это только запутало его.
Это трассировка стека для этого.
_WoWAuthHandler::handleServerData(WoWPacket*)
_WoWPacket::~WoWPacket()
_Packet::~Packet()
_Buffer::~Buffer()
_std::__2::vector<unsigned char, std::__2::allocator<unsigned char> >::~vector()
_std::__2::__vector_base<unsigned char, std::__2::allocator<unsigned char> >::~__vector_base()
~ Buffer () ничего не вызывает.
Я могу контролироватьэта огромная задержка происходит, но она включает в себя удаление вызова удаления этой первой переменной.Не является опцией, так как эта переменная создается динамически.
void Socket::serverToHandler(int dataptr, int len) {
uint8_t* dataraw = (uint8_t*)dataptr;
std::vector<uint8_t>* dataParsed = Socket::parsePacket(dataraw, len);
WoWPacket* dataReader = new WoWPacket(dataParsed);
wowHandler->handleServerData(dataReader);
delete dataReader;//If this is removed, the code runs without issue. However, it lags a huge amount with it.
delete dataraw;
delete dataParsed;
}