在C ++中初始化一个指向类对象中父对象的静态指针

时间:2013-03-06 22:08:48

标签: c++ oop

我希望能够从Element类访问我的Mesh类中的所有节点。我相信我已经正确设置了这两个类,但是我不清楚在Element中初始化静态指针到Mesh的最佳实践。你通常为此做些什么?

谢谢!

代码(到目前为止)

// Mesh.h

#pragma once
#ifndef MESH_H
#define MESH_H

#include <vector>
#include <map>
#include "Eigen/Eigen"
#include "Element.h"
#include "Node.h"

class Mesh {
public:
    std::vector< Node* >                m_Nodes;
    std::vector< Element* >             m_Elements;

    Eigen::MatrixXd                     m_K;
    Eigen::VectorXd                     m_F;
    Eigen::VectorXd                     m_u;

    void Mesh::LoadFile(wchar_t* MeshFile);


};

#endif

// element.h展开

#pragma once
#ifndef ELEMENT_H
#define ELEMENT_H

#include <vector>

class Mesh;

class Element {
public:
    static Mesh *                       m_Parent;
    static int                          m_ElementCount;
    int                                 m_ElementIndex;
    std::vector< int >                  m_ElementNodes;
};

#endif

2 个答案:

答案 0 :(得分:1)

我对你的帖子发表评论缺乏声誉,所以我必须在这里发帖。

为什么不让每个Element实例都有自己的父指针?每个指针都可以指向同一个Mesh对象。记忆储蓄真的那么重要吗?

即使你最终得到一个单例网格,如果将来你想要扩展到多个网格,每个网格都有一组元素,那么更改将更容易。

如果你需要有一个指向父网格的静态指针,你可以在Mesh方法中封装元素的构造,并将父指针设置为 this 在Mesh的构造函数中。

答案 1 :(得分:0)

您必须定义静态指针(在任何源文件中;不在*.h中):

Mesh* Element::m_Parent; // initialized to NULL by the system

此外,要初始化它,请使用以下语法:

Element::m_Parent = whatever;

我尽量不改变你的类设计中的任何内容,但是你应该考虑哪些成员函数和字段应该是static而哪些不应该;现在设计看起来不方便。