如果我有以下课程:
class SimpleContainer {
private:
std::vector<int> vec_;
public:
void set_vec(std::vector<int>* vec) {
vec_ = *vec;
}
SimpleContainer(){}
~SimpleContainer(){}
};
然后执行以下操作:
int main() {
std::vector<int>* vec = new std::vector<int>();
SimpleContainer* sc = new SimpleContainer();
sc->set_vec(vec);
delete sc;
}
vec是否泄露?还是由SimpleContainer的析构函数自动清理?假设我只调用一次set_vec。
答案 0 :(得分:4)
vec是否泄露?
是。您的代码中只有delete
的调用(对于vector<int>*
)。每个new
都需要与delete
配对。
实际上没有理由在这里有任何指示。可以通过以下方式完成相同的行为:
void set_vec(const std::vector<int>& vec) {
vec_ = vec;
}
SimpleContainer sc;
sec.set_vec({});