使用另一个类中的构造函数来分配带new的数组

时间:2014-03-10 18:54:08

标签: c++ class constructor

我不知道(如果它甚至可能)如何使用带参数的另一个构造函数从具有参数的构造函数的类中分配数组。例如(我会写出实际相关的内容。嗯,我怀疑模板是,但仍然):

template <typename T>
class C1 {
    T *array; 
    public:
        C1 (int n) {
            array = new T [n];
        };
};

class C2 {
    int length;
    int lengthArrayC1;
    C1<T> *array;
    public:
        C2 (int x, int y) {
            length = x;
            lengthArrayC1 = y;
            array = //and here's where I'm lost
        };
};

我尝试过多种方式写这样的东西:

array = new [length] C1<T> (lengthArrayC1);

但没有效果。

2 个答案:

答案 0 :(得分:2)

不能这样做:Object array initialization without default constructor

一个类型必须有一个无参数构造函数,以便new[]一个数组。但是,请参阅有关使用std::vector的问题的答案中的提示,该问题允许您指定用于初始化数组元素的原型对象。

答案 1 :(得分:1)

**警告,此刻我没有C ++编译器,因此我的响应中可能存在一些语法错误。话虽如此,这个想法仍然存在。 **

更改C1,使其使用部分模板特化(注意第二个专用参数)......

template <typename T, size_t default_size>
class C1 {
    T *array; 
    public:
        C1 (int n = default_size) {
            array = new T [n];
        };
};

...然后您可以执行以下操作:

array = new [length] C1<T, lengthArrayC1>;

如果您无法修改C1(因为代码由其他人拥有......它会发生),那么您可以执行以下操作:

template <typename T, size_t default_size>
class MyC : public C1
{
public:
   MyC() : C1(default_size){}
};

...

array = new [length] MyC<lengthArrayC1>;

制作一个新课程只是为了做到这一点很丑陋,但有时这是让事情发展的唯一方法如果我们确实需要你在原始问题中尝试做的事情

希望它有所帮助。