私は以下のコードを持っています。私は消去方法を変えなければならないと思う。どのようなアイデアをしてください?私はメモリリークがあると思うが、何を変えるべきか分からない。新しい経由で割り当てられてきたDocument*
のコレクションを維持メモリと時間節約のために関数C++を消去する代わりに
#include <iostream>
#include <unordered_map>
#include <string>
class DocumentStorage
{
class Document
{
public:
Document(std::string& title, std::string& content)
{
this->title = title;
this->content = content;
}
std::string title;
std::string content;
};
public:
void add(int id, std::string title, std::string content)
{
storage[id] = new Document(title, content);
}
void remove(int id, std::string& title, std::string& content)
{
std::unordered_map<int, Document*>::iterator it = storage.find(id);
Document* doc = it->second;
title = doc->title;
content = doc->content;
storage.erase(it);
}
void clear()
{
storage.clear();
}
private:
std::unordered_map<int, Document*> storage;
};
#ifndef RunTests
int main()
{
DocumentStorage storage;
storage.add(123456, "Hamlet", "Hamlet, Prince of Denmark.");
storage.add(123457, "Othello", "Othello, the Moore of Venice.");
std::string title, content;
storage.remove(123456, title, content);
std::cout << title << '\n';
std::cout << content;
storage.clear();
}
#endif
Faster?この機能がアプリケーションのボトルネックであることを測定しましたか? –
私はコードをより速くしたいと思っています。問題はコードのその部分にあると思いました。別の考えがありますか? –
それで、 'Document'オブジェクトを修正して、それを直ちに消去するだけですか?誰が '文書* 'を所有していますか? 'storage'以外に何かがありますか? – Chad