C++的构造函数和析构函数

本文详细介绍了构造函数和析构函数的概念、用途及使用方法。构造函数用于创建对象,而析构函数则在对象被销毁时负责清理资源。通过实例代码演示了构造函数的重载与无参构造函数的自动提供,以及构造函数和析构函数在类中的应用。了解这些基础知识对于编写高效、稳定的C++代码至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数是什么,从构造这个词可以理解为在创建对象前必须得调用的函数,所以构造函数不是给对象调用的,而是拿来创建对象的,构造函数调用肯定先于对象被创建。而且构造函数是不能够被继承的,不管是public还是protected,private。这就意味着我们在写一个类时,我们得写构造函数,如果不写,系统自动默认什么有一个也没做的无参构造函数。如果我们写了构造函数,系统就不会默认构造函数,那么如果你没定义无参构造函数定义了有参构造函数却调用无参的构造函数去创建对象,那么编译会报错。

class Base {
public:
	Base();
	Base(string);
	~Base();
};
Base::Base() {
	cout<<"Base::Base()"<<endl;
}
Base::Base(string str){
	cout<<"Base::Base(string)"<<str<<endl;
}
Base::~Base() {
	cout<<"Base::~Base()"<<endl;
}
int main(){
	Base a;
	Base b("hello world");
	return 0;
}
//打印
Base::Base()
Base::Base(string)hello world
Base::~Base()
Base::~Base()

通过上面代码打印信息可以看出创建对象时构造函数会被调用,如果把Base的无参构造函数屏蔽,编译报错。所以总结:1.当你写一个类时没有定义构造函数,那么你创建对象系统就会自动调用一个什么也没做的无参构造函数。

2.当你写一个类时只定义了有参构造函数,那么你创建对象没有传参数,系统不会默认提供无参构造函数,编译会报错。

3.构造函数可以有很多个,创建对象时根据参数类型个数不同调用相应的构造函数,符合c++里的重载特性。

说完构造函数,析构函数其实跟构造函数类似,构造函数是构造对象,析构函数相反,是在对象被销毁时对手动分配的一些内存进行回收,关闭文件资源等,析构函数一般不手动去调用,在对象被销毁是系统会自动的去调用这个函数,如果在一个对象里在堆分配了空间,却没在析构函数里释放,就会容易导致内存泄露。

pair是STL中的一个容器,用于将两个数据组合成一组数据。它在一些场景下非常有用,比如用作map的键值对插入,或者当一个函数需要返回两个数据时可以选择使用pair。你可以通过pair的first和second成员访问其中的元素。例如,如果有一个pair<int, int> p,你可以使用p.first访问第一个元素,使用p.second访问第二个元素。在C++中,pair的实现是一个结构体。以下是一个示例代码,展示了pair的使用方法: ``` #include <utility> #include <iostream> using namespace std; int main(){ pair<int, int> p<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [c++ STL pair简单用法](https://blog.youkuaiyun.com/weixin_45063703/article/details/127915225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++ pair的基本用法总结整理](https://download.youkuaiyun.com/download/weixin_38621624/13709830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [STL之pair常见用法详解](https://blog.youkuaiyun.com/qq_41140987/article/details/106120500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值