当前位置: 首页> 健康> 美食 > 安阳网站建设优化_加工厂怎么接外贸订单_最新国内新闻50条简短_手机百度ai入口

安阳网站建设优化_加工厂怎么接外贸订单_最新国内新闻50条简短_手机百度ai入口

时间:2025/7/9 5:29:09来源:https://blog.csdn.net/weixin_41931423/article/details/144462432 浏览次数:0次
安阳网站建设优化_加工厂怎么接外贸订单_最新国内新闻50条简短_手机百度ai入口

我们讲一下如何创建并初始化C++类的对象。我们需要注意的一点是,除非是完全静态化的类,不然如果我们想要使用这个类的话就一定需要实例化。一般的话我们实例化类有两个选择,主要取决于我们实例化的时候申请的内存来自于哪里。

class Entity {};

我们定义一个空的类,需要注意的是,即使我们的类里面什么都没有,也要占用至少一个字节内存。

那么当我们在为实例化这个类申请内存的时候,目前我们可以考虑的是。其实我们的内存中还有其他区域,比如全局区和代码区,但是目前我们不会接触到这些区域。

接下来我们对两者做一下区分。首先是在栈中定义变量。我们最常见的定义变量方式其实就是在栈中定义变量。

#include<iostream>
#include<string>class Entity {
private:std::string m_Name;
public:Entity(const std::string& name):m_Name(name) {}Entity():m_Name("Unknown") {}void Print() const {std::cout << m_Name << std::endl;}
};int main() {Entity e;Entity e2("Cherno");std::cin.get();
}

如图所示,这样的话我们就在栈中定义了e和e2两个类Entity的对象。这是最快且最managable的方式。但是首先,栈本身的存储空间都很小,大概只有1-2M左右;其次,在栈中变量有着固定的作用域,而变量的寿命也是由作用于决定的,离开了作用域,变量的寿命就结束了,变量也会跟着被销毁。

{Entity e;
}
e.Print();

比如如果我们这么做,那么我们会得到错误,未定义的标识符e,因为离开了作用域,e根本就不存在了,被销毁了,所以这么写就是错误的。

那么如果我们的对象所占用的空间非常大,或者我们希望对象有更长的寿命,应该怎么办?答案是在堆上建立变量,在堆上就需要用到关键字new。堆分配的方式如下所示:

Entity* e = new Entity("Cherno");
e->Print();

new会返回建立在堆上的变量的位置,所以我们需要定义一个相关的指针,然后使用指针操作。

但是我们面临的问题是,在堆上分配内存会浪费更多的时间,而且需要手动释放在堆上分配的内存,我们需要告诉程序,我们已经不再需要在堆上为这个变量分配内存了,我们要告诉C++这已经结束了,具体释放的方式是使用delete关键字:

delete e;

但是如果我们来自于其他语言,比如JAVA,一切都是建立在堆上的;而C#当中的,struct会建立在栈上,class会建立在堆上。而在C++当中,我们不应该随便使用new,因为需要浪费时间且如果没有手动释放内存的话,会造成内存泄漏,比较危险。

所以如果在变量大或者我们需要变量存活时间更长的情况下,我们可以在堆上建立这个变量;如果不希望手动释放内存,我们可以使用智能指针,但是这都是后续我们会讨论的问题了。

关键字:安阳网站建设优化_加工厂怎么接外贸订单_最新国内新闻50条简短_手机百度ai入口

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: