在 C++(我使用 QT)中,我可以通过两种方式创建 QString 类的实例:
method 1
QString str = "my string";
method 2
QString *str = new QString("my string");
我知道这与指针有关。所以我的问题是:
- 两者有什么区别?
- 我应该坚持哪种方法?
- 什么时候使用方法1正确,什么时候使用方法2正确?
- 在方法2中我可以通过调用来销毁对象
delete str;
。我怎样才能删除str
使用方法1时变量?
Thanks
主要是它们有不同的生命周期:在方法2中创建的对象将存活任意长的时间,直到您调用delete;在方法 1 中,它将在堆栈上创建,并在从函数调用(如果有)返回时销毁。其次,由于内存管理不简单,方法 2 需要更多工作。
使用与您想要的寿命相匹配的方法。如果方法 1 的生命周期足够好,则不要使用方法 2,因为它会带来内存管理的开销。如果你可以重构你的程序,以便你可以使用方法1,同时改进设计,那将更加高效和优雅。
见上文 2.。特别是,使用方法 1 并存储指向对象的指针并在其生命周期结束后访问它是一个陷阱。使用方法 2 也是可能的,但显式销毁将程序员的注意力集中在它上面(但仍然因为生命周期并不简单,这可能是一个陷阱)方法 2 的一个陷阱是忘记删除它,导致内存泄漏(或删除它)太早了,并如本段前面所述提及它)
在方法1中,当函数返回时,对象将被自动删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)