如何将类的两个参数切换到我用指针创建的对象?语法是什么? (他们必须收到所有相同的参数)
在正常情况下,我使用它:
MyClass obj[5]={MyClass(x,y)}
但是......在这种情况下,语法是什么? :
MyClass *obj;
obj = new MyClass[5]; //Here! <----
如何传递这两个参数?
答案 0 :(得分:0)
我假设您的问题是:&#34;如何使用完全相同的构造函数调用初始化数组中的所有对象?&#34;
如果是这种情况,最简单的方法是使用std::vector
's constructor (2):
vector( size_type count, const T& value, const Allocator& alloc = Allocator());
使用值为
count
的元素value
副本构造容器。
然后你的例子变成:
std::vector<MyClass> obj(5, MyClass{x, y});
如果您真的想使用C风格的数组,则必须使用 placement new
手动调用构造函数,并在需要避免不必要的默认值时手动调用析构函数构造函数调用。例如:
std::aligned_storage_t<sizeof(MyClass), alignof(MyClass)> obj[5];
for(auto& x : obj) { new(&x) MyClass{x, y}; }
// ... use `obj` ...
for(auto& x : obj) { reinterpret_cast<MyClass*>(&x)->~MyClass(); }
请注意,上述代码可以(并且应该)重构为安全抽象。
答案 1 :(得分:0)
没有语法可以列出 - 初始化动态分配的数组。
你必须
1)不是一个选项。 2)有点复杂,但是你不必自己做,因为std::vector
已经为你实现了它。无论如何你应该使用vector,因为它负责内存管理。
矢量示例,类似于您的正常情况&#34;。请注意您的正常情况&#34;与您问题中的描述不符:
std::vector<MyClass> v{
{x1, y1},
{x2, y2},
...
};
带向量的示例,它与您将相同参数传递给数组中所有对象的描述相匹配。虽然从技术上讲,这个副本构造了数组元素:
std::vector<MyClass> v(5, {x, y});