c++ - 如何使用参数化构造函数动态分配对象数组?

标签 c++ dynamic-allocation

<分区>

考虑一个简单的类:

class SimpleClass {
    int a;
public:
    SimpleClass():a(0){}
    SimpleClass(int n):a(n){}
    // other functions
};

SimpleClass *p1, *p2;

p1 = new SimpleClass[5];

p2 = new SimpleClass(3);

在这种情况下,调用默认构造函数 SimpleClass() 来为 p1 构造新分配的对象,并为 p2 构造参数化构造函数。我的问题是:是否可以分配一个数组并使用 new 运算符使用参数化构造函数?例如,如果我希望用变量 a 值分别为 10、12、15 ... 的对象初始化数组,是否可以在使用 new 运算符时传递这些值?

我知道使用 STL vector 是处理对象数组的更好主意。我想知道上面是否可以使用 new 分配数组。

最佳答案

您可以将 placement-new 用作:

typedef std::aligned_storage<sizeof(SimpleClass), 
                             std::alignment_of<SimpleClass>::value
                             >::type storage_type;

//first get the aligned uninitialized memory!
SimpleClass *p1 = reinterpret_cast<SimpleClass*>(new storage_type[N]);

//then use placement new to construct the objects
for(size_t i = 0; i < N ; i++)
     new (p1+i) SimpleClass(i * 10);

在此示例中,我将 (i * 10) 传递给 SampleClass 的构造函数。

希望对您有所帮助。

关于c++ - 如何使用参数化构造函数动态分配对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15332053/

相关文章:

c++ - 动态分配的矩阵不会得到指向指针的指针

c++ - 如何检查C++类中作为数据成员的指针是否已经初始化?

c++ - 结构基类作为抛出异常对象

c++ - 使用指向基抽象类的指针访问子类成员

c - 为什么我在 malloc 一个 char* 后得到一个仍然可以访问的 block ?

不调用 C++ 析构函数

c - Malloc 和 Realloc 不起作用(C11 - CLion)

c++ - 在 C++ 项目中使用 CNTKlibrary.h 进行评估

c++ - C++中 '~'有什么用?

c++ - 我的字符串队列结构有什么问题?