我想知道当函数在其中创建对象时会发生什么
I'd like to know what happens when a function create objects in it
我知道在函数中创建的对象在函数结束时被删除。(当不使用'new'时)
1。
void test() {
list<int> temp(5,5);
list<int>* temp2 = new list<int>(5,4);
}
int main() {
test();
return 0;
}
我可以看到对象'temp'的析构函数只被调用一次。那么分配给'temp2'的内存永远不会被删除吗?即使项目已经结束了?
2。
char* foo() {
return "HELLO"
}
char* foo2() {
char* temp = "HI"
return temp
}
int main() {
cout << foo() << endl;
cout << foo2() << endl;
return 0;
}
我可以看到它打印两个字符串,"HELLO"answers"HI"。但. .为什么?当一个物体是用"new"做的时候也是同样的情况吗?
如果你用new
分配一个对象,它的析构函数只有在你用delete
销毁它时才运行。如果您从未在对象上调用delete
,那就是内存泄漏。(大多数现代操作系统会在程序终止时释放程序的所有内存,但是析构函数不会为泄漏的对象运行,因为它们是在程序已经结束后被释放的。)
"HELLO"
和"HI"
这样的字符串字面值不是动态分配的,所以它们不必被释放。foo
和foo2
函数返回指向预定义数据的指针,这些数据与程序代码一起加载到内存中。(字符串字面值存储在标记为只读的内存区域中,因此您应该使用char const *
来避免意外地试图修改其内容。)
SeongYun Ko,我相信你的疑问是:如果temp变量的值被删除,那么它是如何打印出来的?
你必须明白,当你调用函数foo或foo2时,你在这些函数中声明的变量将被创建和销毁…每次你打电话给他们。因此,如果您调用foo函数两次,您将打印出两个"HELLO"语句,逻辑过程将是这样的:
第一次调用foo函数:创建临时变量,返回临时变量,销毁临时变量,打印foo返回的变量
第二次调用foo函数:创建临时变量,返回临时变量,销毁临时变量,打印foo返回的变量
所以基本上每次你调用一个函数,里面的变量都会被创建和销毁,每次
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- 存储动态创建对象的列表/向量的最佳方法是什么
- 在 C/C++ 中创建对象时编译器优化的边界是什么
- 在免费商店中创建对象有什么用
- 我在创建对象并使用向量而不是数组使用它们的类函数时遇到问题......我做错了什么?
- 我想知道当函数在其中创建对象时会发生什么
- 什么时候在c++中创建对象?
- 使用new创建对象时会发生什么
- 什么时候删除对象?创建对象对c++的影响
- 创建引用和创建对象的主要区别是什么?