C++:在堆上创建对象,还是在栈上?

引言
在我们使用基本的数据类型或者自定义数据类型创建³³变量或者对象的时候的英文在堆上还是栈上?

在堆上与栈上有什么区别?

在对象之间赋值的时候,什么时候需要重载“=”号,或者使用memcopy?

堆与栈的区别

堆和栈的区别在于两点:

  • 生命周期
  • 性能

第一点才是我们需要着重考虑的。
由于栈的特性,如果你需要一个具有比其所在的上下文更长的生命周期的变量(包括成员变量),只能在堆上创建它。
所以,我们的推荐是:只要能在栈上创建对象,就在栈上创建;否则的话,如果你不得不需要更长的生命周期,选择只能创建³³堆上
这的英文由于在栈上的对象不需要我们手动管理内存。有经验的开发人员都会对内存管理感到头疼,我们就是要避免这种情况的发生。总的来说,我们更多推荐选择在栈上创建对象

但是,有些情况,即便你在栈上创建了对象,它还是会占用堆的空间考虑如下代码:

void func
{
    std::vector v;
} 

对象v是在栈上创建的。但是,STL的vector类其实是在堆上存储数据的(这可以查看源代码)。
因此,只有对象v本身是在栈上的,它所管理的数据这些数据大多数时候都会远大于其本身的大小)还是保存在堆上。

对象之间的赋值

在进行对象之间的数据传值的时候,当涉及到指针的时候,就要使memcopy。将指针所指向的内容copy过来,而不是简单的copy指针的值。

猜你喜欢

转载自blog.csdn.net/osean_li/article/details/80470984