小甲鱼C++视频的一个问题,关于析构函数
本帖最后由 Sì曾相識♂ 于 2013-7-13 22:17 编辑刚在看小甲鱼C++视频的第十五讲:不是每滴牛奶都叫特仑苏(构造器和析构函数讲解)
先上代码,然后来说下我的不解:
#include <iostream>
#include <string>
#include <fstream>
class StoreQuote
{
public:
std::string quote, speaker;
std::ofstream fileOutput;
StoreQuote();
~StoreQuote();
void inputQuote();
void inputSpeaker();
bool write();
};
StoreQuote::StoreQuote()
{
fileOutput.open("test.txt", std::ios::app);
}
StoreQuote::~StoreQuote()
{
fileOutput.close();
}
void StoreQuote::inputQuote()
{
std::getline(std::cin, quote);
}
void StoreQuote::inputSpeaker()
{
std::getline(std::cin, speaker);
}
bool StoreQuote::write()
{
if( fileOutput.is_open() )
{
fileOutput << quote << "|" << speaker << "\n";
return true;
}
else
{
return false;
}
}
int main()
{
StoreQuote quote;
std::cout << "请输入一句名言:\n";
quote.inputQuote();
std::cout << "请输入作者:\n";
quote.inputSpeaker();
if( quote.write() )
{
std::cout << "成功写入文件^_^";
}
else
{
std::cout << "写入文件失败T_T";
return 1;
}
return 0;
}
从以上的代码可以看出,小甲鱼虽然有给析构函数 添加实现代码,但是在main函数中并没有调用析构函数。
于是我的不解就来了,难道析构函数跟构造函数一样会自己自动调用?如果自己自动调用的话,那又是何时去调用呢?系统如何判断什么时候该调用呢???
本人C++菜鸟,还请各位大神指点一二。
另外在简单的问一句,现在C++视频的课后习题答案在哪里??论坛改版了,找不到了....:'(
PS:小甲鱼的最后附图不错(并不是每滴牛奶都叫特仑苏那张....):lol
对象生命周期结束的时候将自动调用析构函数。你的例子里,就是局部对象quote在main函数结束的时候自动调用析构函数。 析构函数也可以自己主动调用,但是这不是常规的做法。在你真的成为高手之前不要这么做。 仰望天上的光 发表于 2013-7-13 23:49 static/image/common/back.gif
析构函数也可以自己主动调用,但是这不是常规的做法。在你真的成为高手之前不要这么做。
谢谢 版主,了解了。
那就是说,在编译器编译链接的过程中就把析构函数的汇编代码写进了exe?
编译器帮你判断了哪里是你的局部对象结束的位置? Sì曾相識♂ 发表于 2013-7-14 10:22 static/image/common/back.gif
谢谢 版主,了解了。
那就是说,在编译器编译链接的过程中就把析构函数的汇编代码写进了exe?
编译器帮你 ...
基本是这样的,但有个例外,就是动态new出来的对象,只要你不delete,该对象就不会销毁,也就不会调用西沟函数。 仰望天上的光 发表于 2013-7-14 10:31 static/image/common/back.gif
基本是这样的,但有个例外,就是动态new出来的对象,只要你不delete,该对象就不会销毁,也就不会调用西沟 ...
我用OD调试了一下发现,直接声明出来的 用的是栈区,new出来的 用的是堆。 不知道我调试的对不对.... Sì曾相識♂ 发表于 2013-7-14 10:39 static/image/common/back.gif
我用OD调试了一下发现,直接声明出来的 用的是栈区,new出来的 用的是堆。 不知道我调试的对不对....
你的调试没有问题。此外你还可以试验下全局对象或static局部对象,他们是存储在静态存储区 仰望天上的光 发表于 2013-7-14 10:43 static/image/common/back.gif
你的调试没有问题。此外你还可以试验下全局对象或static局部对象,他们是存储在静态存储区
谢谢版主指导:handshake 仰望天上的光 发表于 2013-7-14 10:43
你的调试没有问题。此外你还可以试验下全局对象或static局部对象,他们是存储在静态存储区
问个问题。小甲鱼这个程序,第一个输入名言 仰望天上的光 发表于 2013-7-14 10:43
你的调试没有问题。此外你还可以试验下全局对象或static局部对象,他们是存储在静态存储区
用getline函数,但是我输入的是字符串,他是按回车结束,也就是回车没有被getline接受,而被字符串接受了。我第一次要按2次回车才可以,这是为什么呀 这是为什么那,我把你的代码直接copy过来的
页:
[1]