我正在尝试测试各种指针速度的速度并遇到了一个非常奇怪的问题。分配原始指针时,它运行良好。(存在内存泄漏,但这不是问题。)当我使用 shared_ptr 运行第二个测试时,它运行良好,打印日志,然后当它返回时,它进入一个无限循环。看起来引用计数是垃圾,但我正在按价值做所有事情。
#include <memory>
#include <vector>
#include <functional>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>
#include <Windows.h>
using namespace std;
static const int TOTAL = 1000000;
int* newTest(int i)
{
return new int(i);
}
shared_ptr<int> sharedTest(int i)
{
return shared_ptr<int>(new int(i));
}
template <typename T>
pair<int, vector<typename T::result_type>> Fill(T fn)
{
unsigned long start = GetTickCount();
vector<typename T::result_type> vec;
vec.reserve(TOTAL);
for(int i = 0; i < TOTAL; i++)
{
vec.push_back(fn(i));
}
unsigned long end = GetTickCount();
return make_pair(end - start, move(vec));
}
template <typename T>
void Test(T fn, string name)
{
vector<typename T::result_type> newTest;
int milliseconds = 0;
tie(milliseconds, newTest) = Fill(fn);
cout << "Fill " << name << " Took " << milliseconds << " milliseconds." << endl;
}
int main()
{
function<int*(int)> fn1 = newTest;
Test(fn1, "Raw Ptr");
function<shared_ptr<int>(int)> fn2 = sharedTest;
Test(fn2, "Shared New");
return 0;
}
好的。看来我在 Stackoverflow 上问了一个堆栈溢出问题......当我将 TOTAL 设置为 10000 时,这很好。那么,这只是其他问题的症状还是我需要增加我的筹码量?
从评论编辑:
塔维森:好的。几分钟后它结束了。你说的不是无限循环是对的。但是,新的 1043 毫秒和许多分钟的删除使得很难证明使用它们的合理性。这不是我所期望的结果。