std :: vector,constructors,objects

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)

如果没有,有没有办法如何安排呢?

Jam*_*lis 6

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_ptrunique_ptr代替的auto_ptr智能指针(注意:由于其不寻常的复制语义,智能指针不能存储在容器中,因此shared_ptrunique_ptr应该使用).

在任何情况下,要将指向n个不同的动态分配对象的指针插入容器,您需要调用newn次来创建这些n个对象.您的for循环解决方案没有任何问题.