gpt4 book ai didi

c++ - 在 C++ 的特定情况下,是否在没有删除新运算符的情况下创建了对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:31 24 4
gpt4 key购买 nike

如果我们有如下代码片段:

MyObject my_object = MyObject(0);
my_object = MyObject(1);

MyObject(0) 发生了什么?删除了吗?看看我读到的关于它的内容,只有当我们离开创作范围时,它才应该被删除,所以答案可能是否定的。如果是这种情况,除了使用指针之外,还有什么方法可以显式删除它吗?

最佳答案

MyObject my_object = MyObject(0);

此行使用 MyObject 的构造函数在堆栈上创建了 my_object,该构造函数可以接受 int

my_object = MyObject(1);

这一行创建了一个临时 MyObject,再次使用与第一个相同的构造函数。然后通过调用赋值运算符将其分配给 my_object。如果您没有提供此运算符,那么编译器将为您创建一个执行 复制的运算符。当此语句完成时,临时 MyObject 超出范围并调用它的析构函数。

当您的 my_object 超出范围时,它又以相同的方式销毁。在任何时候您都不需要手动删除它,因为所有内容都分配在堆栈上。

关于c++ - 在 C++ 的特定情况下,是否在没有删除新运算符的情况下创建了对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7279400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com