考虑以下代码:
#include <iostream>
#include <vector>
using namespace std;
class SomeClass {
public:
SomeClass(int num) : val_(num) {}
int val_;
int val() const { return val_; }
};
// Given a vector of vector of numbers, this class will generate a vector of vector of pointers
// that point to SomeClass.
class Generator {
public:
vector<SomeClass> objects_;
vector<vector<SomeClass*> > Generate(const vector<vector<int> >& input) {
vector<vector<SomeClass*> > out;
for (const auto& vec : input) {
out.push_back({});
for (const int num : vec) {
SomeClass s(num);
objects_.push_back(s);
out.back().push_back(&objects_.back());
}
}
return out;
}
};
int main() {
Generator generator;
auto output = generator.Generate({{2, 3}, {4, 5}, {6}});
for (const auto& vec : output) {
for (const auto* obj : vec) {
printf("%d ",obj->val());
}
printf("\n");
}
return 0;
}
类中的Generate
方法Generator
将简单地将向量的向量int
s 转换为指针向量的向量SomeClass
。
SomeClass
只是一个int
带有 getter 方法的简单值的容器。
我希望得到以下输出:
2 3
4 5
6
但是,我得到以下输出:
junk_integer junk_integer
4 5
6
第一行的指针似乎变成了悬空指针。这段代码有什么问题?