shared_ptr <t>如何访问T的元素或函数</t>

时间:2013-10-25 20:29:05

标签: c++ c++11 shared-ptr

我认为我没有掌握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的理解缺乏部分。

1 个答案:

答案 0 :(得分:6)

make_shared函数接受将传递给T的构造函数的参数; make_shared的要点是避免通过使用shared_ptr构建new来进行额外分配。

在您的情况下,您希望使用ofstream构造函数构建ofstream(const char*),因此您应该只使用make_shared<ofstream>("ttt.txt")

关于您的编辑,如果您的应用程序崩溃,您不应该尝试清理资源。可怕的事情让它崩溃,谁知道它处于什么状态;你可以通过尝试做任何事情来造成伤害。话虽如此,当应用程序终止时,您的操作系统将清理应用程序拥有的大多数资源,例如文件句柄,无论是优雅还是不正常。