如何解决如何在C ++中存储对象?在堆还是堆栈?
#include <string>
#include <iostream>
class Type {
public:
int x;
Type(int a)
{
x = a;
}
Type(const Type& type1)
{
std::cout << "copy" << std::endl;
}
};
Type Func()
{
Type s(1);
std::cout << &s << std::endl;
return s;
}
int main()
{
Type c = Func();
std::cout << &c << std::endl;
std::cout << c.x << std::endl;
system("pause");
}
C ++为堆或堆栈中的对象分配内存吗?在Func中,假设“ s”是在堆栈中分配的,那么为什么不对其进行解构呢?为什么我可以在main()中调用它。我很困惑。
解决方法
默认情况下,对象存储在堆栈中(除非它们的实现具有动态分配器,例如映射)。如果您有自己的课程并实例化它,它将存在于堆栈中。但是,不建议这样做,因为堆栈数量被认为是宝贵而稀缺的资源。如果要有一个重的对象或许多轻的对象,最好动态分配它们。
在现代C ++版本中,我们有move semantics和move constructors(它们可以由编译器自动生成)。基本上,编译器会优化您的代码。在这种情况下,无论如何s
都将被销毁,将对象c
复制到s
效率低下。 move构造函数所做的基本上是从s
窃取数据并将其直接提供给c
(在这种情况下,仅使用c
作为存储s的存储位置的别名)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。