Rob*_*obo 1 c++ constructor pointers stl vector
下面的构造函数
std::vector<Object> objects(n);
Run Code Online (Sandbox Code Playgroud)
创建n个对象,调用默认构造函数,即类似的东西:
std::vector <Object> objects;
for (unsigned int i = 0; i < n; i++) objects.push_back(o);
Run Code Online (Sandbox Code Playgroud)
此过程对动态分配的对象也有效吗?是建筑
std::vector<Object *> objects(n);
Run Code Online (Sandbox Code Playgroud)
代表这个功能?
std::vector <Object*> objects;
for (unsigned int i = 0; i < n; i++) objects.push_back(new Object());
Run Code Online (Sandbox Code Playgroud)
如果没有,有没有办法如何安排呢?
std::vector<Object> objects(n);
Run Code Online (Sandbox Code Playgroud)
这种行为取决于标准库实现实现的C++标准版本:
在C++ 03中,这将创建一个默认构造Object,然后复制对象n次的构造.
在C++ 0x中,此默认值构造n Objects.
差异通常不重要,但知道很好.
std::vector<Object *> objects(n);
Run Code Online (Sandbox Code Playgroud)
这会在vector其中创建一个带有n null的Object*s.由于Object*不是类类型并且没有构造函数,因此新插入的对象是值初始化的,对于指针,它们意味着它们被设置为NULL.
如果要动态创建新对象,然后在容器中存储指向它们的指针,则需要new自己调用.请注意,如果容器拥有指向的对象,则不应将原始指针存储在标准库容器中.这样做并非例外.
你应该使用类似shared_ptr或unique_ptr代替的auto_ptr智能指针(注意:由于其不寻常的复制语义,智能指针不能存储在容器中,因此shared_ptr或unique_ptr应该使用).
在任何情况下,要将指向n个不同的动态分配对象的指针插入容器,您需要调用newn次来创建这些n个对象.您的for循环解决方案没有任何问题.
| 归档时间: |
|
| 查看次数: |
5704 次 |
| 最近记录: |