【发布时间】:2017-01-18 20:07:36
【问题描述】:
我正在尝试将转换应用于 shared_ptr 并存储到 shared_ptr,同时还在类中使用函数。
我创建了这个例子:
#include <vector>
#include <iostream>
#include <memory>
#include <algorithm>
using namespace std;
class MyClass {
public:
int factor = 0;
MyClass(const int factor_) : factor(factor_) {}
shared_ptr<vector<int> > mult(shared_ptr<vector<int> > numbers) {
shared_ptr<vector<int> > result(new vector<int>() );
transform(numbers->begin(), numbers->end(), result->begin(),
[this](int x){ return factor * x; });
return result;
}
};
int main()
{
shared_ptr<vector<int> > numbers(new vector<int>());
shared_ptr<vector<int> > res(new vector<int>());
MyClass times_two(2);
numbers->push_back(1);
numbers->push_back(2);
numbers->push_back(3);
res = times_two.mult(numbers);
cout << "{";
for (unsigned int i = 0; i < res->size(); ++i)
cout << res->at(i) << ", ";
cout << "}";
return 0;
}
正如here 所见,这会导致分段转储。关于如何解决这个问题以便输出产生{2, 4, 6, }的任何帮助?
请注意,我使用 lambda 是因为在我的完整实现中需要它。
我也试过替换,
transform(numbers->begin(), numbers->end(), result->begin(),
[this](int x){ return factor * x; });
与
transform((*numbers).begin(), (*numbers).end(), (*result).begin(),
[this](int x){ return factor * x; });
【问题讨论】:
标签: c++ c++11 lambda transform shared-ptr