使用指针的具有多个参数的对象数组
array of objects with multiple parameters using a pointer
如何将类的两个参数切换到我正在使用指针创建的对象?语法是什么?(它们必须接收所有相同的参数(
在正常情况下,我使用这个:
MyClass obj[5]={MyClass(x,y)}
但。。。在这种情况下,语法是什么?:
MyClass *obj;
obj = new MyClass[5]; //Here! <----
如何传递这两个参数?
没有语法来列表初始化动态分配的数组。
你必须
- 1( 默认构造,如您显示的示例所示,并在创建后修改对象。
- 或者 2( 分配一个足够大小的 char 数组,并使用 placement-new 构造对象。
如果类不是默认可构造的,则 1( 不是一个选项。2(有点复杂,但你不必自己做,因为std::vector
已经为你实现了它。无论如何,您都应该使用矢量,因为它负责内存管理。
一个带有矢量的示例,类似于您的"正常情况"。请注意,您的"正常情况"与问题中的描述不符:
std::vector<MyClass> v{
{x1, y1},
{x2, y2},
...
};
一个带有 vector 的示例,它符合将相同参数传递给数组中所有对象的描述。尽管从技术上讲,此复制构造数组元素:
std::vector<MyClass> v(5, {x, y});
我假设你的问题是:">如何使用完全相同的构造函数调用初始化数组中的所有对象?
如果是这种情况,最简单的方法是使用 std::vector
的构造函数 (2(:
vector( size_type count, const T& value, const Allocator& alloc = Allocator());
使用值为
value
的元素的count
个副本构造容器。
然后,您的示例变为:
std::vector<MyClass> obj(5, MyClass{x, y});
如果确实要使用 C 样式数组,则必须使用放置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(); }
请注意,上面的代码可以(并且应该(重构为安全的抽象。
相关文章:
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Arduino C++在构造函数中用参数声明对象数组
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- C++ 类对象作为函数参数
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 如何编写将展开以定义具有模板参数的对象的宏
- C++类对象 - 遍历基于参数的对象
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 是否可以获取成员函数模板参数的拥有对象?
- C++多参数对象创建
- 在不创建参数对象的情况下解析constexpr函数
- 推断模板参数对象成员的类型
- 如何解析c++ v8中的参数对象
- 当默认参数对象被销毁时
- 为什么函数不能更改其参数对象的地址/引用值?