当前位置: 首页 > news >正文

东莞樟木头哪里有做网站的3分钟搞定网站seo优化外链建设

东莞樟木头哪里有做网站的,3分钟搞定网站seo优化外链建设,简述网站建设及维护的全过程,互动网站建设创建并初始化C对象 当我们创建一个C对象时,它需要占用一些内存,即使我们写一个完全为空的类,类中没有成员,什么也没有,它至少也要占用一个字节的内存。但是我们类中有很多成员,它们需要存储在某地方&#…

创建并初始化C++对象

当我们创建一个C++对象时,它需要占用一些内存,即使我们写一个完全为空的类,类中没有成员,什么也没有,它至少也要占用一个字节的内存。但是我们类中有很多成员,它们需要存储在某地方,当我们决定开始使用这个对象时,我们会创建一堆变量,对象有一堆变量,我们需要在电脑的某个地方分配内存,这样我们就可以记住这些变量设置的值。

应用程序会将内存主要分为两部分,栈和堆,还有其他部分的内存,比如源代码的区域。

在C++中我们要选择对象要放在哪里,对象是在栈上还是在堆上创建,它们有不同的功能差异。

栈:栈对象有一个自动的生存期,他们的生存期实际上是由它声明的地方的作用域决定的,只要变量超出作用域,也就是说内存被释放了,因为当作用域结束的时候,栈会弹出作用域里面的东西,栈上的任何东西会被释放。

堆:一旦在堆中分配一个对象,实际上你已经在堆上创建了一个对象,它会一直待在那里,直到你做出决定,确定不需要它,想要释放这个对象,那怎末处理这段内存都行。
 

代码案例:

在栈上创建: 

在什么时候在栈上创建对象?

几乎所有的时候,如果你能像这样在栈上创建对象,那就像这样创建对象,因为这是C++中最快的方法,也是可以管控的方法,去初始化对象

某些情况下不能这么做的原因?

1、如果将实例化对象放到main函数的生存期外

void Function(){int a = 2;Entity entity;}

一旦到达函数结尾的花括号,这个entity会从内存中被销毁
当我们在main函数中调用Function时,就为这个函数创建了一个栈结构,它包含了我们声明的所有局部变量,其中包括基本类型,也包括我们的类和对象,当函数结束时,栈帧会被销毁,即栈上所有的内存,所有创建的变量都消失了

如果想让括号{}内的实例化对象在作用域之外依然存在,就不能分配到栈上,需要使用堆分配。

2、如果entity的规模太大,可能有太多的entity,可能没有足够的空间在栈上分配,因为栈通常非常小,通常是1M/2M

# include <iostream>
# include <string>
using namespace std;class Entity
{
private:string m_Name;  //只有一个成员,是一个字符串
public:Entity() : m_Name("Unknown") {}Entity(const string& name) : m_Name(name) {}const string& GetName() const { return m_Name; }
};int main()
{// 1、在栈上创建Entity entity; // 实际上调用了默认构造函数Entity() : m_Name("Unknown")cout << entity.GetName() << endl;Entity entity1("chen");// 等价于 Entity entity1 = Entity("chen")cout << entity1.GetName() << endl;/*在什么时候在栈上创建对象?几乎所有的时候如果你能像这样在栈上创建对象,那就像这样创建对象,因为这是C++中最快的方法,也是可以管控的方法,去初始化对象某些情况下不能这么做的原因?1、如果将实例化对象放到main函数的生存期外void Function(){int a = 2;Entity entity;}一旦到达这个花括号,这个entity会从内存中被销毁当我们调用Function时,就为这个函数创建了一个栈结构,它包含了我们声明的所有局部变量,其中包括基本类型,也包括我们的类和对象,当函数结束时,栈帧会被销毁,即栈上所有的内存,所有创建的变量都消失了Entity* e;{Entity entity2("cherno");e = &entity2;cout << entity2.GetName() << endl;} 一旦出了{}作用域,就到达了栈端,entity2对象就已经不存在了如果想让括号{}内的实例化对象在作用域之外依然存在,就不能分配到栈上,需要使用堆分配cin.get();return 0;
}

在堆上创建:

在堆上创建,首先要做的就是在改变类型,将Entity改成Entity*,通过new关键字,这里最大的区别不是那个类型变成了指针,而是new关键字,new关键字是关键。

Entity* entity = new Entity("cherno");当我们调用new Entity时,会在栈上分配内存,调用构造函数,这个new Entity实际上会返回一个Entity*,它会返回entity在堆上被分配的内存地址。

使用new关键字必须调用delete释放内存

delete + 变量名:delete entity;

性能问题:在堆上分配要比栈花费更长的时间,而且在堆上分配的话,您必须手动释放被分配的内存

# include <iostream>
# include <string>
using namespace std;class Entity
{
private:string m_Name;  //只有一个成员,是一个字符串
public:Entity() : m_Name("Unknown") {}Entity(const string& name) : m_Name(name) {}const string& GetName() const { return m_Name; }
};int main()
{// 2、在堆上创建/*在堆上创建,首先要做的就是在改变类型,将Entity改成Entity*,通过new关键字,这里最大的区别不是那个类型变成了指针,而是new关键字,new关键字是关键当我们调用new Entity时,会在栈上分配内存,调用构造函数,这个new Entity实际上会返回一个Entity*,它会返回entity在堆上被分配的内存地址*/Entity* entity = new Entity("cherno");//释放内存//delete 变量名;delete entity;/*性能问题:在堆上分配要比栈花费更长的时间,而且在堆上分配的话,您必须手动释放被分配的内存*/cin.get();return 0;
}

创建对象的两种方法,如何选择?

如果对象太大,或者需要显示地控制对象的生存期,那就是用堆创建,其他情况就是用栈创建。

http://www.hrbkazy.com/news/51516.html

相关文章:

  • 建成网站的关键是营销方式和营销策略
  • 一般网站用什么做的百度竞价广告收费标准
  • 免费全面的seo教程seo待遇
  • 网站手机定位授权怎么做网站建设百度推广
  • wordpress数据库文件路径云南seo网络优化师
  • 购书网站开发seo网站优化工具大全
  • 哈尔滨建站平台详细解读指数计算器
  • wordpress文章内链苏州百度快照优化排名
  • 网上做二建题那个网站好怎么注册电商平台
  • 让人做网站需要注意什么条件seo还有前景吗
  • 做市场的逛的网站搜索引擎网址
  • 设一个网站需要多少钱培训网登录入口
  • 如何进行网站管理网络营销有哪些形式
  • 无锡做网站要多少钱网站网页设计
  • 婚庆网站名字2345系统导航
  • 高端集团官方网站建设公司网站链接提交收录
  • android毕业设计代做网站百度竞价怎么做效果好
  • 疫情的最新消息网站优化公司哪家好
  • 网站建设教程 企业邮箱sem工资
  • 免费快递网站源码百度搜索指数是怎么计算的
  • 网络营销的特点与方法有哪些崇左seo
  • 金华公司做网站在线优化网站
  • 河北省建设机械协会网站百度云登录首页
  • 制作企业网站怎么报价百度手机助手苹果版
  • 杭州网站建设技术湖南搜索引擎推广平台
  • 广州做网站一般要多少钱百度推广客户端app下载
  • 凡客优品官网惠州短视频seo
  • 国外开源建站系统关键词优化哪个好
  • 怎么用ps做购物网站优化推广公司哪家好
  • 政府机构做门户网站的好处百度如何做推广