Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 其中C++;调用析构函数?_C++_Class_Memory Management_Destructor - Fatal编程技术网

C++ 其中C++;调用析构函数?

C++ 其中C++;调用析构函数?,c++,class,memory-management,destructor,C++,Class,Memory Management,Destructor,假设Member和MyList是两个用户定义的类。在以下代码中: void fillList(MyList &list1) { Member m1("aaa"); Member m2("bbb"); list1.insert(m1); list1.insert(m2); } void func1() { MyList lst; fillList(lst); lst.printAll(); } int main() {

假设
Member
MyList
是两个用户定义的类。在以下代码中:

void fillList(MyList &list1)
{
    Member m1("aaa");
    Member m2("bbb");
    list1.insert(m1);
    list1.insert(m2);   
}

void func1()
{
    MyList lst;
    fillList(lst);
    lst.printAll();
}

int main()
{
    func1();
    return 0;
}
<> P> C++中的每个C++代码调用析构函数M1、<代码> M2和 LST

假定C++不删除将被再次使用的对象总是安全的吗?

在哪一点C++中调用M1、M2和LST? 析构函数在作用域的末尾调用,顺序与对象定义相反。在您的例子中,首先调用

func1()
,它定义
lst
,然后调用
fillList()
,它定义
m1
m2
。接下来
fillList()
结束,现在调用
m2
然后调用
m1
析构函数(与它们的声明顺序相反)。最后
func1()
结束,因此调用
lst
析构函数

假定C++不删除将被再次使用的对象总是安全的吗?p> 我真的不明白你的意思。一个被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬空指针/引用)只是未定义的行为

在哪一点C++中调用M1、M2和LST? 析构函数在作用域的末尾调用,顺序与对象定义相反。在您的例子中,首先调用

func1()
,它定义
lst
,然后调用
fillList()
,它定义
m1
m2
。接下来
fillList()
结束,现在调用
m2
然后调用
m1
析构函数(与它们的声明顺序相反)。最后
func1()
结束,因此调用
lst
析构函数

假定C++不删除将被再次使用的对象总是安全的吗?p> 我真的不明白你的意思。一个被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬空指针/引用)只是未定义的行为

在哪一点C++中调用M1、M2和LST? 析构函数在作用域的末尾调用,顺序与对象定义相反。在您的例子中,首先调用

func1()
,它定义
lst
,然后调用
fillList()
,它定义
m1
m2
。接下来
fillList()
结束,现在调用
m2
然后调用
m1
析构函数(与它们的声明顺序相反)。最后
func1()
结束,因此调用
lst
析构函数

假定C++不删除将被再次使用的对象总是安全的吗?p> 我真的不明白你的意思。一个被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬空指针/引用)只是未定义的行为

在哪一点C++中调用M1、M2和LST? 析构函数在作用域的末尾调用,顺序与对象定义相反。在您的例子中,首先调用

func1()
,它定义
lst
,然后调用
fillList()
,它定义
m1
m2
。接下来
fillList()
结束,现在调用
m2
然后调用
m1
析构函数(与它们的声明顺序相反)。最后
func1()
结束,因此调用
lst
析构函数

假定C++不删除将被再次使用的对象总是安全的吗?p>


我真的不明白你的意思。一个被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬空指针/引用)只是未定义的行为。

析构函数在其作用域结束时(如果在“堆栈”上分配)或手动调用其
delete
运算符(如果动态分配)时被调用


至于你的另一个问题,假设这类事情绝对是不安全的。C++让你用你喜欢的钝的锯来切断自己的腿。它可能会问您是否需要一些小猫形状的绷带(您必须自己制作),但仅此而已。

析构函数在其作用域结束时(如果在“堆栈”上分配)或当您手动调用其
delete
操作符(如果动态分配)时被调用


至于你的另一个问题,假设这类事情绝对是不安全的。C++让你用你喜欢的钝的锯来切断自己的腿。它可能会问您是否需要一些小猫形状的绷带(您必须自己制作),但仅此而已。

析构函数在其作用域结束时(如果在“堆栈”上分配)或当您手动调用其
delete
操作符(如果动态分配)时被调用


至于你的另一个问题,假设这类事情绝对是不安全的。C++让你用你喜欢的钝的锯来切断自己的腿。它可能会问您是否需要一些小猫形状的绷带(您必须自己制作),但仅此而已。

析构函数在其作用域结束时(如果在“堆栈”上分配)或当您手动调用其
delete
操作符(如果动态分配)时被调用


至于你的另一个问题,假设这类事情绝对是不安全的。C++让你用你喜欢的钝的锯来切断自己的腿。它可能会问你是否想要一些小猫形状的绷带(你必须自己做),但就这样。

为什么不运行它呢?这似乎是用一些打印语句来验证的一个小问题。<代码>如果假设C++没有删除一个将被再次使用的对象,那么它总是安全的吗?< /代码>否。但是如果这个案例的工作取决于插入方法。“UB哪个有效”有很多问题。@deviantfan实际上我需要