我有一个类,其成员类型为vector<CCPoint>
。我想在构造函数调用中初始化这个成员,怎么能实现呢?
我这样做了:
·H
class A{
public:
A(vector<CCPoint> *p);
private:
vector<CCPoint> *p;
}
的.cpp
A:A(){
this->p = p;
}
呼叫
Vector<CCPoint> *p = new Vector<CCPoint>;
A a = new A(p);
答案 0 :(得分:4)
这会泄漏内存,因为没有人删除你“新”的矢量。
另外,为什么要指向一个向量的指针?你是否担心将它复制到昂贵的构造函数中?
将成员更改为向量:
class A{
public:
A(vector<CCPoint> p);
private:
vector<CCPoint> p;
}
更改构造函数以使用初始化列表:
A:A(vector<CCPoint> newP) : p(newP){
// Empty
}
并且这样打电话:
Vector<CCPoint> p;
A a(p);
永远不要创建一个带有“new”的对象,除非你确切知道为什么这样做,即便如此,也要重新考虑。
性能注意:是的,可能会导致矢量副本发生,具体取决于编译器的复制省略。另一种C ++ 11花式裤子解决方案是使用move:
class A{
public:
A(vector<CCPoint> p);
private:
vector<CCPoint> p;
}
A:A(vector<CCPoint> newP) : p(std::move(newP)){
// Empty
}
Vector<CCPoint> p;
A a(std::move(p)); // After this completes, 'p' will no longer be valid.
答案 1 :(得分:0)
你的cpp文件中有一个错误,你错过了第二个冒号:
A::A() {
此外,您可以使用初始化列表直接初始化 p ,如下所示:
A::A( vector<CCPoint>* _p ) :
p( _p )
{}
并不是说将它用于像指针这样的原始类型有任何真正的优势,但这是一个很好的约定。这回答了你的问题了吗?根据你的帖子,我不清楚问题究竟是什么。