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 Object
s.
差异通常不重要,但知道很好.
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个不同的动态分配对象的指针插入容器,您需要调用new
n次来创建这些n个对象.您的for
循环解决方案没有任何问题.