【发布时间】:2016-03-02 18:08:26
【问题描述】:
这是我自己的 Point 类 (Point.h):
class Point {
public:
Point(double x, double y, double z);
Point(const Point& orig);
virtual ~Point();
double getX();
double getY();
double getZ();
void writeOut();
private:
double x, y, z;
};
这里我创建一个点并将其添加到vector<Point> (main.cpp):
Point* p = new Point(0.1,0.2,0.3);
vector<Point>* points = new vector<Point>;
points->push_back(*p);
//doing stuff
delete points;
我的问题:vector 是复制 Point 并存储它(所以我也需要 delete p;),还是存储之前创建的一个实例?
更新:
我读到 here 说 push_back “在向量的末尾添加一个新元素,在其当前最后一个元素之后。val 的内容被复制(或移动)到新元素。 "但是哪一个?复制还是移动?它是如何确定的?
【问题讨论】:
-
C++ 不是 Java 或 C#。您不需要所有这些对
new的调用来创建对象。Point p(0.1, 0.2, 0.3); vector<Point> points; points.push_back(p); -
你存储p指向的对象的副本
-
为什么所有这些
new/delete的东西。你这样做有什么特别的理由吗? -
@πάνταῥεῖ 是的,我的原始代码比这更复杂,我为这个问题简化了它。 (而且我喜欢新建和删除)
-
如果您简化到大量指针,我建议暂停并重新考虑。