我认为我没有掌握shared_ptr
。
示例代码:
shared_ptr<ofstream> logger;
int main(){
logger = make_shared<ofstream>(new ofstream("ttt.txt"));
*logger <<"s";
return 0;
}
错误1错误C2664:'std :: basic_ofstream&lt; _Elem,_Traits&gt; :: basic_ofstream(const char *,std :: ios_base :: openmode,int)':无法从'std :: basic_ofstream&lt; _Elem转换参数1 ,_Traits&GT; 'to'conc char *'c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ xxshared 13
编辑:
[
In the mean time, if I wanna close the ofstream while some crashes happened.
How can I do it?
I mean if shared_ptr release the memory without closing the file.
There would be problems.
]
我不知道如何实现这一目标。或许这根本就是胡说八道。希望任何人都能提出一个想法,或指出我对shared_ptr
的理解缺乏部分。
答案 0 :(得分:6)
make_shared
函数接受将传递给T
的构造函数的参数; make_shared
的要点是避免通过使用shared_ptr
构建new
来进行额外分配。
在您的情况下,您希望使用ofstream
构造函数构建ofstream(const char*)
,因此您应该只使用make_shared<ofstream>("ttt.txt")
。
关于您的编辑,如果您的应用程序崩溃,您不应该尝试清理资源。可怕的事情让它崩溃,谁知道它处于什么状态;你可以通过尝试做任何事情来造成伤害。话虽如此,当应用程序终止时,您的操作系统将清理应用程序拥有的大多数资源,例如文件句柄,无论是优雅还是不正常。