在构造函数中初始化任意大小的指针数组

时间:2014-06-12 08:12:29

标签: c++

在我正在处理的项目中,我需要创建一个包含指向同一类其他对象的指针数组的类。我目前无法初始化此阵列。 例如:

class MrClass{

    MrClass* otherInstances[];

public:

    MrClass(MrClass* x[]){
        otherInstances = x;
    }

}

这个数组必须是任意大小的,因为要传递的类的实例数是在编译时定义的,并且它必须是指针的,因为类的多个实例必须能够访问相同的对象。

2 个答案:

答案 0 :(得分:2)

正确的解决方案

使用std::vector<MrClass *>std::array<MrClass *>。甚至更好,std::vector<std::shared_ptr<MrClass>>

class MrClass{

    std::vector<std::shared_ptr<MrClass>> otherInstances;

public:

    MrClass(std::vector<std::shared_ptr<MrClass>> const & x)
        : otherInstances(x)
    {

    }
}

辅助解决方案

如果你真的需要一个数组(并且你真的知道,你正在做什么),请执行以下操作:

class MrClass{

    MrClass ** otherInstances;
    int otherInstancesCount;

public:

    MrClass(MrClass ** x, int count){

        otherInstances = x;
        otherInstancesCount = count;
    }
}

答案 1 :(得分:0)

任意大小的数组在C ++中编写std::vector。所以 你有:

class MrClass
{
    std::vector<MrClass*> otherInstances;
public:
    MrClass( std::vector<MrClass*> const& initialValues )
        : otherInstances( initialValues )
    {
    }
};