在初始化列表中使用指向非初始化成员的指针

时间:2013-11-08 16:34:35

标签: c++ pointers initializer-list

我不知道我是否设法描述了我在标题中的含义,但是说我们有一个类数据如下:

class Data
{
public:
    Data(int i) : m_data(i) {} // Must always be initialized with a value
    int m_data;
};

像这样的主类:

class Main
{
public:
    Main() :
        m_data(Set(&m_data)) // Is it ok to use the pointer of m_data like this?
    {
    }

private:
    int Set(Data* pData)
    {
        m_pData = pData;
        return 10;
    }

    Data* m_pData;
    Data m_data; //Must be initialized in the initializer list of the constructor
};

我的问题是:
在实际初始化m_data之前,我可以安全地将& m_data作为指向Set函数的指针吗? (假设指针未在Set函数中使用,仅存储)
即;在m_data本身被初始化之前,& m_data指针是否有效?

1 个答案:

答案 0 :(得分:1)

  

在实际初始化&m_data之前,我可以安全地将Set作为指向m_data函数的指针吗?

当然,你可以这样做:从指针读取到内存被写入至少一次是违法的,但指针本身可以安全存储。