C++でクラスを作成した際にそのクラスをvectorに保存して使おうと思っているのですが
クラスをnewして使用したとき、
クラスをnewしないで使用したときに
ずいぶんと速度差が出ました
クラスをデストラクタで破棄しないと言うことがわかっているときは、newしない方がいいのでしょうか
実験したのはVisual Studioで以下のコードです
私のPCでは大体
newしなかった場合の時間:0.37秒.
newした場合の時間:0.47秒.
位の時間が掛かっています(newした方とnewしなかった方と入れ替えても速度差は変わらりませんでした)
ctestdata.h
class ctestdata { private: int _a; public: void setA(int a); void addA(); int getA(); };
ctestdata.cpp
//とりあえずテストコード void ctestdata::setA(int a) { _a = a; } void ctestdata::addA() { for (int i = 0; i < 100; i++) { _a++; } } int ctestdata::getA() { return _a; }
main.cpp
int main() { int loopMax = 1000000; //-------------------------------------------------------------------------------------------- std::vector <ctestdata> cbv; clock_t start2 = clock(); // スタート時間 for (int i = 0; i < loopMax; i++) { ctestdata cb; cb.setA(1); cb.addA(); cbv.push_back(cb); } clock_t end2 = clock(); // 終了時間 std::cout << "newしなかった場合の時間:" << (double)(end2 - start2) / CLOCKS_PER_SEC << "秒.\r\n"; //-------------------------------------------------------------------------------------------- std::vector <ctestdata*> cav; clock_t start = clock(); // スタート時間 for (int i = 0; i < loopMax; i++) { ctestdata* ca = new ctestdata(); ca->setA(i); ca->addA(); cav.push_back(ca); } clock_t end = clock(); // 終了時間 std::cout << "newした場合の時間:" << (double)(end - start) / CLOCKS_PER_SEC << "秒.\r\n"; }
回答3件
あなたの回答
tips
プレビュー