分配到列表时如何避免内存泄漏。 C ++

时间:2017-09-02 12:00:42

标签: c++ memory-leaks

我是C++的新程序员,我有一些基本问题,我无法通过在线查看。

1)假设我有一个对象,它的成员只是原语。在我的程序中,我使用new创建对象。这个对象析构函数应该是什么?

2)现在假设我有一个名为lst的列表,它包含一些对象作为上面的对象(只有原始成员)。如果在某些时候我做了以下事情: lst[i] = new MyObject;(当lst[i]已有对象时)。

我应该在此作业之前删除lst[i]中的对象吗?如果不是真的发生了什么?

这是我的代码的一部分更具体:

class Point {
public:
    Point();
    ~Point();
    string toString() const;
    void set(long int x, long int y);
    Point(long int x, long int y);

    long int getX() const;

    long int getY() const;

    // -----------operators--------------

    bool operator==(const Point& point) const;
    bool operator!=(const Point& point);
    bool operator<(const Point& point);

private:
    long int _x;
    long int _y;
};

这是我的PointSet类,它包含点列表:

class PointSet
{
public:
    PointSet();
    PointSet(const PointSet &init);
    ~PointSet();
    string toString() const;
    bool add(const Point &point);
    bool remove(const Point &point);
    int getSize() const;
    void setSize(int newSize);
    bool operator==(const PointSet& other);
    bool operator!=(const PointSet& other);
    PointSet& operator-(const PointSet& other) const;
    PointSet& operator&(const PointSet& other);
    PointSet& operator=(const PointSet& other);
    bool isMember(const Point& point) const;
    Point* getPointsList();
private:
    Point* _allPoints;
    int _size;
    int _capacity;
};

这是我主要的问题代码:

for(int i = 0; i < listLen; ++i)
    {
        pointsList[i] = pointsList[i + 1];
    }

pointList [0]中的对象会发生什么? (pointsList是Point对象列表)

1 个答案:

答案 0 :(得分:0)

与c ++中的C#不同,在声明指向对象的原始指针时,只使用new运算符,例如。

PointSet *mypoint = new PointSet();

如果你能提供帮助,我根本不建议使用原始指针。请改用shared_pointers,因为您不必担心内存泄漏。然后,您可以使用make_shared替换new。