C++ 将堆栈上声明的元素添加到静态数组

C++ 将堆栈上声明的元素添加到静态数组,c++,vector,memory-management,static,move,C++,Vector,Memory Management,Static,Move,假设我有一个std::vector,它被声明为静态的。我可以将在调用函数的堆栈上本地声明的对象添加到向量中而不产生任何影响吗 根据我的理解,向量将其元素存储在堆上。意思是如果我告诉向量像这样移动元素 myvector.push_back(std::move(element)); 它将被存储在堆上,并且它的可见性将被保留,对吗 编辑:我希望避免复制对象,因为它管理其他资源 我说得对吗?或者这可以更容易地完成吗?您通常可以通过从具有自动或静态存储的对象复制来复制具有动态存储的初始化对象,反之亦然。

假设我有一个std::vector,它被声明为静态的。我可以将在调用函数的堆栈上本地声明的对象添加到向量中而不产生任何影响吗

根据我的理解,向量将其元素存储在堆上。意思是如果我告诉向量像这样移动元素

myvector.push_back(std::move(element));
它将被存储在堆上,并且它的可见性将被保留,对吗

编辑:我希望避免复制对象,因为它管理其他资源


我说得对吗?或者这可以更容易地完成吗?

您通常可以通过从具有自动或静态存储的对象复制来复制具有动态存储的初始化对象,反之亦然。是否通过移动复制对象并不重要


理论上,有些类只有在以某种方式分配时才能正常工作,但为了防止出现问题,这些类应该设置为不可复制的。

通常对象被复制到向量中,因此不需要做任何特殊的事情。@Someprogrammerdude感谢您的回答!我应该提到,我希望避免复制对象,因为它管理资源,复制对象会打乱程序。然后移动(像你一样)应该也可以。“理论上,只有以某种方式分配的类才能正确工作”-我经常听到这样的神秘/魔法课程,它们知道它们是在免费商店分配的还是自动存储的。在我的C++写作20年里,我还没有看到一个(除了一些非常有计划和高度平台化的例子,只是为了证明一个点)。我也没有遇到过我希望/需要一个对象知道这一点的情况。请给出一个(有用的)示例?@JesperJuhl我遇到的实际案例是来自Ogre3D库的一个与日志相关的单例类。如果要将参数传递给其构造函数,则必须使用
new
创建动态实例,因为构造函数会将第一个创建的实例注册为单例,库会在关闭时将其删除。我肯定有一些优势,但我怀疑这是解决设计所解决的任何问题的唯一方法。