c++关于对象实例化以及函数传参的那些事,果然一不小心就是个大bug[机智]

结论

  • 如果非必要,不使用new。
  • 如果使用new,需要在适当的时机手动销毁。
  • 如果嵌套使用的new,尽量在析构函数(我承认这个是我刚学会的[蠢])内销毁。
  • c++程序必须好好测试,验证是否有内存泄漏,验证方法,本小白不太会,还请各位大神指教

代码

#include <iostream>

using namespace std;

class tutorial_10
{
private:
    string name;
public:
    tutorial_10(string name);
    ~tutorial_10();
};

tutorial_10::tutorial_10(string name)
{
    this->name = name;

    cout << "创建了:" << this->name << endl;
}

tutorial_10::~tutorial_10()
{
    cout << "销毁了:" << this->name << endl;
}

void testc()
{
    tutorial_10 *c = new tutorial_10("c");
}

void testd()
{
    tutorial_10 d("d");
}

void testa2(tutorial_10 a){
    cout << "执行了: teste2" << endl;
}

void testa3(tutorial_10 &a){
    cout << "执行了: teste3" << endl;
}

void testa4(tutorial_10 *a){
    cout << "执行了: teste4" << endl;
}

int main()
{
    tutorial_10 a("a"); // 这样创建的对象,函数结束会自动销毁
    testa2(a); // 值传递的对象,不会走构造方法,但是会在子函数结束自动销毁
    testa3(a); // 引用传参的方式,和原来的值共用一个
    testa4(&a); // 地址传参的方式,和原来的值共用一个
    tutorial_10 *b = new tutorial_10("b"); // new的对象需要手动delete,不自动销毁
    testc(); // new的对象,在子函数结束和程序结束都不会销毁
    testd(); // 局部变量直接使用构造创建的函数,函数结束会被自动销毁
    tutorial_10 *e = new tutorial_10("e"); // new的对象需要手动delete,不自动销毁
    delete b;
}

log

创建了:a
执行了: teste2
销毁了:a
执行了: teste3
执行了: teste4
创建了:b
创建了:c
创建了:d
销毁了:d
创建了:e
销毁了:b
销毁了:a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值