我有一个接受const向量引用的方法。我想在堆上放置一个可变版本的向量并返回
这可以编译,但我不确定它是否真的按照我的想法行事。我不确定我是否对这段记忆感到幸运:
vector<Type> *vect = new vector<Type>;
*vect = vectReference;
答案 0 :(得分:2)
没关系,你动态分配了vector
副本。但是使用复制构造函数而不是默认构造函数和赋值运算符可以更简单地完成相同的操作:
vector<Type> *vect = new vector<Type>(vectReference);
还想建议使用智能指针而不是原始指针:std::unique_ptr
或std::shared_ptr
- 取决于您的代码语义。
答案 1 :(得分:1)
据我了解你,你做得对。在第二行,您将矢量从vectReference复制到堆上分配的vect。
答案 2 :(得分:1)
此代码可以正常工作。
但是,您需要确保“vect”分配空间,以后应该释放空间,因此您可能希望使用std :: auto_ptr来确保对象被销毁:
std::auto_ptr<std::vector<Type> > vect(new std::vector<Type>);
*vect = vectReference;
答案 3 :(得分:1)
这将完全符合您的要求。你甚至可以通过以下方式缩短它:
vector<Type> *vect = new vector<Type>(vectReference);
调用复制构造函数而不是赋值运算符。