我想做类似下面的事情 type1_t和type2_t是自定义类。 上面代码片段的问题是object对于每个 if else 子句都是局部的,但我不能在 if-else 之上定义它,因为类型依赖于flag 。 后期编辑:似乎我无法在我正在使用的代码库中使用 C++17 功能,因此std::vari ...
我想做类似下面的事情 type1_t和type2_t是自定义类。 上面代码片段的问题是object对于每个 if else 子句都是局部的,但我不能在 if-else 之上定义它,因为类型依赖于flag 。 后期编辑:似乎我无法在我正在使用的代码库中使用 C++17 功能,因此std::vari ...
我一直在阅读 Scott Meyer 的“Effective C++”和“More Effective C++”中关于智能指针的部分。 其中,有一个auto_ptr的实现,其构造函数编写如下: 我的问题是:为什么构造函数中的指针不是由 const 引用传递的? p在构造函数中没有改变,所以co ...
澄清:我并不是真的在这里寻找解决方法,因为最简单的解决方法就是安装更新版本的库。 只是问这个特定的事情是否可能。 更新:我刚刚意识到这个库不仅仅是头文件,这使得下面描述的用例不可行。 不过,抽象的问题仍然存在。 我有一些针对在其 API 中使用auto_ptr的第三方库构建的代码。 (存在该 ...
什么是简单的 C++ 程序,其中std::vector<std::auto_ptr<T>>编译但无法正确执行,而带有std::vector<std::unique_ptr<T>>的同一程序编译并工作正确,对于某些数据类型T ? 我知道std::aut ...
假设我们有 我们有一个主要的 function: 书中说“当 UsePointer() 返回时,object 被销毁,因为变量 spObj 从 scope 中消失,因此被销毁” 我的问题是: 传给UsePointer function时指针是否被复制? 因此所有权转移了? 如果不希望 spObjec ...
我需要将我的错误和日志消息存储到文件中。 这是代码示例: 如果我将cerrFile定义为全局变量,它会正确释放吗? 我需要像使用常规指针一样在退出之前关闭日志文件吗? ...
我已经在这些问题上提到了很多 StackOverflow 链接,其中auto_ptr无法与 STL 一起正常工作的原因是std::auto_ptr<>不满足可复制和可分配的要求(因为auto_ptr有一个假的复制构造函数,基本上转让所有权)。 但是即使unique_ptr也没有复制 c ...
在赫伯·萨特(Herb Sutter)和安德烈·亚历山大(Andrei Alexandrescu)在规则52中撰写的“ C ++编码标准。101规则,指南和最佳实践”一书中,最后的报价是: “在极少数情况下,具有奇怪类型的成员的类(例如,引用,std :: auto_ptrs)是一个例 ...
auto_ptr不支持自定义删除器,tr1 shared_ptr对我来说不是一个好选择。 在c11之前,对于unique_ptr / auto_ptr与自定义删除器看起来有什么好的选择吗? ...
是否有宏或编译器标志可以让我在带有-std=c++17 GCC 7/8中继续使用auto_ptr ? 我已经轻松地找到了适用于clang和MSVC的宏,但是我的Google-fu不够好,无法找到GCC的解决方案。 我不想使用-fpermissive (这会让我无意间做了太多我不应该做的事 ...
具有共享的项目库,必须使用各种编译器C ++ 17 C ++ 03等进行编译。因此,如果要保持代码的通用性,仅适当地使用更好的unique_ptr或不太理想的auto_ptr是不理想的。 看一下#ifdef类型的解决方案,但它会变得混乱。 加上对经过良好测试和测试的编码进行编辑并不是一个 ...
为什么我将get()与* ,而不是只调用* ? 请考虑以下代码: 结果完全一样。 get()更安全吗? ...
我们有一个托管C ++ DLL,当在regasm注册时,它似乎向注册表添加了一些垃圾类型。 在Blah类中,任何利用MyTeam.ManagedAutoPtr的私有变量都将添加到注册表中。 我现在的问题是,是否可以调试为什么将某些内容添加到注册表? 再气/冗长无济于事 Blah的相 ...
请考虑以下代码: get()成员函数是否是检查p尚未初始化的标准且可靠的方法? 它是否总是返回0,无论平台,编译器,编译器的优化标志等如何? ...
我正在使用Cppcheck 1.75检查我的项目之一,并且此代码(为清楚起见而减少): 我收到此新的性能警告: ID:passedByValue 摘要:函数参数“ task”应通过引用传递。 消息:参数“任务”按值传递。 它可以作为(const)引用传递,通常 ...
我正在阅读本书C ++标准库书 这是我无法理解的部分: 请注意,类auto_ptr <>不允许使用赋值语法初始化具有普通指针的对象。 我不明白为什么不允许这样做。 他们试图通过不允许使用赋值语法进行初始化来避免哪些陷阱 ...
注释行: bar(foo())不编译,因为bar接受非const引用而foo返回rvalue。 但是第二行用std::auto_ptr编译。 std::auto_ptr复制构造函数也接受非const引用。 为什么然后它编译? 我在foo1使用了std::rand()来消除RVO(返回值 ...
为什么在auto_ptr中有模板复制构造函数和覆盖操作符函数? C ++的ISO标准为auto_ptr指定了以下接口。 (这是直接从2003年标准中复制的。) 为什么有: 我想只需auto_ptr(auto_ptr&) throw(); 没关系 。 ...
据我所知,auto_ptr用于所有权转让的概念。 同样,一旦一个自动指针将其所有权转移给另一个自动指针,它就不再能够引用它指向的对象。 但是,并非如下面的程序所示,我发现了这种情况。 我想念什么吗? 请帮忙。 L1行:由于p1不再拥有所有权,这如何工作? L2行:由于p1不 ...
将gcc与-std = c ++ 11一起使用 2.40.1 得到很多这样的警告:/usr/include/libxml++-2.6/libxml++/parsers/saxparser.h:224:8:警告:不推荐使用'template class std :: auto_ptr ...