避免循环包括shared_ptrs



我有一对类,我似乎无法避免循环包含问题:

点.h

#include group.h // Needed for GroupOfPoints::weak_ptr
class Point
{
private:
double _x;
double _y;
// Groups of points that this point belongs too
std::vector<GroupOfPoints::weak_ptr> _groups;
public:
typedef std::shared_ptr<Point> shared_ptr;
typedef std::weak_ptr<Point> weak_ptr;
Point(); // Constructor
// etc...
}

组.h

#include point.h // Needed for Point::shared_ptr
class GroupOfPoints
{
private:
// Collection of points that fall in this group
std::vector<Point::shared_ptr> _points;
public:
typedef std::shared_ptr<GroupOfPoints> shared_ptr;
typedef std::weak_ptr<GroupOfPoints> weak_ptr;
GroupOfPoints(); // Constructor
// etc...
}

我知道共享指针和弱指针以对偶性存在以防止循环所有权,但是在指针是成员变量的情况下,我如何利用这种没有循环包含的对偶性(即必须在头而不是实现文件中定义(?

首先摆脱这个:

typedef std::shared_ptr<Point> shared_ptr;
typedef std::weak_ptr<Point> weak_ptr;

我不明白这一点。

std::shared_ptr<Foo>Foo::shared_ptr更清楚.

现在,向前声明class Point;class Group;。 这可以代替#include <point.h>,或者在包含另一个头文件之前

接下来,确保在你的构造函数定义,他们可以看到另一个类的整个声明;无论你在哪里调用make_shared<Foo>new Foodelete Fooshared_ptr<Foo>(pFoo)。 共享指针类型在施工时擦除销毁。

相关内容

  • 没有找到相关文章

最新更新