草庐IT

ofstream_ptr

全部标签

c++ - 具有自定义删除器的 unique_ptr 构造函数被删除

这个例子在gcc4.8.3下编译和运行良好:#include#include#includeintmain(){autostr=newconstchar[6]{'h','e','l','l','o','\0'};std::unique_ptr>u_ptr(str,[](constchar*s){delete[]s;});std::cout但是当我尝试使用VisualStudioProfessional2013时,它无法编译(提示函数已删除)。这在VisualStudio2013中还不可能吗?还是我的示例代码有误而gcc忽略了我的错误?错误是:main.cpp(8):errorC2280

C++:将像 unique_ptr::get() 这样的参数传递给函数是否安全

传递像getAName(getA().get())这样的函数参数是安全的?getA()返回一个对象unique_ptr.我在VS2010上测试了下面的整个代码,它有效。但我想确定它是否是c++标准,与其他c++编译器一起使用是否安全?#include"stdafx.h"#include#includeusingnamespacestd;classA{public:A(){coutgetA(){returnstd::unique_ptr(newA());;}voidgetAName(A*a){if(a){coutname().c_str()控制台的输出是:A()A~()为了所有编译器的安

c++ - 在 C 接口(interface)中使用 shared_ptr?

我有一个要移植到C++的C库,它大量使用手动引用计数结构。我考虑过使用shared_ptr来自动处理引用计数,但我还想维护CAPI。旧签名看起来像这样:Object*object_create(void);Object*object_retain(Object*o);voidobject_release(Object*o);如果我使用shared_ptr,有什么方法可以有效地在CAPI中公开此手动引用计数? 最佳答案 shared_ptr的问题,正如您已经发现的那样,您不能修改引用计数,除非通过构造或销毁实例。所以不,除了为每个构造

c++ - 查找 boost::shared_ptr 循环引用

是否有查找shared_ptr的循环引用的任何提示/技巧?这是我要查找的示例-不幸的是,我似乎无法在我的代码中找到循环。structA{boost::shared_ptranC;};structB{boost::shared_ptranA;};structC{boost::shared_ptranB;}; 最佳答案 我建议使用Valgrind.当您关闭进程时,它会显示所有泄漏的内存。除非你的关机以某种方式打破了循环,否则任何循环都应该显示为内存泄漏,Valgrind会告诉你内存最初是从代码中的哪个位置分配的。

c++ - 是否可以使用 std::unique_ptr 来管理 DLL 资源?

我有很多LoadLibrary在我的项目中,需要调用FreeLibrary手动为每个LoadLibrary.我想使用std::unique_ptr具体deleter让它自动释放我的dll资源。这就是我要定义的:std::unique_ptrtheDll(LoadLibrary("My.dll"),FreeLibrary);但是编译器提示类型不匹配。我发现它期望*HMODULE来自LoadLibrary.即std::unique_ptr会期待A*作为它的指针类型。看起来我仍然需要定义一个新类来管理DLL资源(构造函数中的LoadLibrary和析构函数中的FreeLibrary)。有可能

c++ - 为什么 unique_ptr operator* 不是 noexcept?

这个问题在这里已经有了答案:"No-throwdereferencing"ofstd::unique_ptr(1个回答)关闭4年前。在为我的爱好操作系统实现一个基本的std库时,我遇到了这个并想知道为什么:operator->()和T*get()都被标记为noexcept,但是operator*()不是。根据引用资料,它应该等同于*get(),这将允许它成为noexcept并查看一些实现,我看不出为什么不是。为什么unique_ptr的取消引用运算符没有标记为noexcept?

c++ - 为什么 STL ifstream 和 ofstream 类不将 std::string 作为文件名?

这是对STL的提示。为什么他们将文件名参数作为(char*)而不是std::string?这似乎没有意义。关于这个主题还有另外两个问题:HowtoopenunicodefilenameswithSTLWindowsCodepageinteractionswithC++问题是我有很多看起来像这样的代码:std::ofstreamf(fname.c_str());当我希望它看起来像这样时:std::ofstreamf(fname);上述帖子中提到的其他问题是UTF-16与UTF-8的问题。(UTF-16可能包含会破坏POSIXAPI的NULL)。但这并不是真正的问题,因为实现可以在调用op

c++ - ifstream 和 ofstream 或 fstream 使用 in 和 out

在处理文件时,以下两个示例中的哪一个是首选?一个提供比另一个更好的性能吗?有什么区别吗?ifstreaminput("input_file.txt");ofstreamoutput("output_file.txt");对比fstreaminput("input_file.txt",istream::in);fstreamoutput("output_file.txt",ostream::out); 最佳答案 在性能方面,在这种情况下可能只有微不足道的差异。您充其量只是节省了一点内存。重要的是第一种情况有助于语义:std::fstr

c++ - 使用带有 unique_ptr 的自定义删除器

借助shared_ptr,您可以使用自定义删除器,例如:autofp=shared_ptr(fopen("file.txt","rt"),&fclose);fprintf(fp.get(),"hello\n");这将记住fclose文件,无论函数如何退出。但是,引用局部变量似乎有点矫枉过正,所以我想使用unique_ptr:autofp=unique_ptr(fopen("file.txt","rt"),&fclose);但是,这不会编译。这是缺陷吗?有简单的解决方法吗?我是否遗漏了一些微不足道的东西? 最佳答案 应该是unique

C++ - vector<> 中的 std::unique_ptr 是 nullptr

我想将Particle对象存储在vector对象中,以便稍后访问它。这些粒子(Electrons和Protons)继承自包含toString()虚方法的Particle类。此toString()方法随后在Electron和Proton类中被覆盖。当我读取vector容器时,我想访问Electron或Proton特定的toString()方法,而不是粒子。显然,一种方法是使用std::unique_ptr。这是我尝试运行的代码的一部分:intmain(){/**/std::vector>particles(nbParticles);particles.push_back(std::uni