【发布时间】:2015-02-04 22:44:20
【问题描述】:
我想分配一个大对象(bitset<1000000000>)。由于要避免拥有原始指针,我尝试了以下声明:
auto foo()->std::unique_ptr<std::bitset<MAX>>;
...
{
auto bar = foo();
}
这会导致堆栈溢出错误(编译器是 VS2013)。但是
auto foo()->std::bitset<MAX>*;
...
{
auto bar = foo();
...
delete bar;
}
没有。
foo() 的实现如下:
auto is_prime =
//std::make_unique<std::bitset<MAX>>(std::bitset<MAX>{});
// or:
new std::bitset<MAX>{};
is_prime->set();
(*is_prime)[0] = (*is_prime)[1] = false;
auto max_i = static_cast<int>(std::sqrt(MAX)) + 1;
for (auto i = 1; i < max_i; i++) {
if ((*is_prime)[i]) {
for (auto j = i * i; j < MAX; j += i) {
(*is_prime)[j] = false;
}
}
}
return is_prime;
我错过了什么明显的东西?
【问题讨论】:
-
foo()的实现是什么样的? -
@BobFincheimer 我添加了它。它只是一个初筛,真的没有什么异国情调。
-
@dyp:我也是这么想的,然后意识到每个例子都是一个声明,后面跟着一个复合语句,大概在其他函数中。
-
@aschepler 刚看到,谢谢 :)
标签: c++ c++11 smart-pointers