C++为什么“没有调用”构造,但却调用了析构——其实调用了

C++编程中,即使看似没有调用构造函数,实际上每个对象创建都会调用,可能是系统生成的。在函数参数传递和返回值时,对象的隐式赋值会触发复制构造。同样,对象一旦释放,总会调用析构函数,除非是定位new的情况。理解这些机制有助于避免疑惑和潜在问题。
摘要由CSDN通过智能技术生成

C++忽略了默认复制构造函数造成的疑惑:为什么“没有调用”构造,但却调用了析构

提前说一下,不是没有调用,所有对象创建时,一定调用,但是某些情况下会调用系统生成的构造

先来看一段诡异的代码:

class A {
private:
    int a;
public:
    A(int a = 0);
    ~A();
};

A::A(int a) {
    this->a = a;
    cout << this << "调用构造" << endl;
}

A::~A() {

    cout << this << "调用析构" << endl;
}

A function(A obj) {
    return obj;
}

int main() {

    A obj;
    function(obj);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值