在 C++ 中(我使用 QT)我可以通过两种方式创建 QString 类的实例:
方法一
QString str = "my string";
方法二
QString *str = new QString("my string");
我知道这与指针有关。所以我的问题是:
- 两者有什么区别?
- 我应该坚持哪种方法?
- 什么时候使用方法 1 是正确的,什么时候使用方法 2 是正确的?
- 在方法 2 中,我可以通过调用
delete str;
来销毁对象。使用方法 1 时如何删除str
变量?
谢谢
最佳答案
主要是它们具有不同的生命周期:在方法 2 中创建的对象将存在任意长的时间,直到您调用 delete;在方法 1 中,它将在堆栈上创建并在函数调用返回时销毁(如果有)。其次,方法 2 需要更多工作,因为内存管理非常重要。
使用与您想要的生命周期相匹配的方法。如果方法 1 的生命周期对您来说足够好,则不要使用方法 2,因为它需要内存管理的开销。如果您可以重组您的程序,以便在使用方法 1 的同时改进设计,那将更加高效和优雅。
见上文 2。特别是,使用方法 1 并存储指向对象的指针并在其生命周期后访问它是一个陷阱。这对于方法 2 也是可能的,但是显式销毁将程序员的注意力集中在它上面(但仍然因为生命周期并不简单,它可能是一个陷阱)方法 2 的一个陷阱是忘记删除它导致内存泄漏(或删除它)为时过早,如本段前面所述提及它)
在方法 1 中,当函数返回时,对象将被自动删除。
关于c++ - 在 C++ 中实例化对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439869/