2

我不认为我已经掌握了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<_Elem,_Traits>::basic_ofstream(const char *,std::ios_base::openmode,int)' : 无法从 'std::basic_ofstream<_Elem,_Traits> 转换参数 1 ' 到 'const 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.

4

1 回答 1

6

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

在你的情况下,你想构造一个ofstreamusing 它的ofstream(const char*)构造函数,所以你应该只使用make_shared<ofstream>("ttt.txt").

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

于 2013-10-25T20:37:15.847 回答