auto-ptr相关内容

向量的编译问题<auto_ptr<>>

考虑以下代码: #include #include #include 使用命名空间标准;结构 A{诠释一个;A(int a_):a(a_) {}};主函数(){向量>作为;for (int i = 0; i >::iterator it = as.begin(); it != as.end(); ++it)cout 在尝试编译它时, ..
发布时间:2022-01-23 20:54:37 C/C++开发

为什么使用 std::auto_ptr<> 是错误的?使用标准容器?

为什么在标准容器中使用 std::auto_ptr 是错误的? 解决方案 C++ 标准规定 STL 元素必须是“可复制构造的"和“可分配的".换句话说,一个元素必须能够被分配或复制,并且这两个元素在逻辑上是独立的.std::auto_ptr 不满足此要求. 以这段代码为例: class X{};std::vector>vecX;vecX.push_back(新X);std::a ..
发布时间:2022-01-07 10:48:35 C/C++开发

使非对象资源符合RAII

在我的代码中,我使用了windows.h中的HANDLE.它们的用法就像 HANDLE h; if (!openHandleToSomething(arg1, arg2, &h)) { throw std::exception("openHandleToSomething error"); } /* Use the handle in other functions which ca ..
发布时间:2020-06-21 19:52:50 C/C++开发

从函数返回auto_ptr错误/容易出错吗?

假设我在我的代码中使用std::auto_ptr. 返回std::auto_ptr对象是否有危险? 即会导致内存泄漏,不确定的行为等吗?还是安全使用std::auto_ptr? *我不询问是否有更好的替代品(例如shared_ptr);我特别是在问返回auto_ptr本身的陷阱. 解决方案 通常,它是安全的,并且可以导致更健壮的代码.因为指向的内存是自动删除的,所以它不会导致 ..
发布时间:2020-06-21 19:52:47 C/C++开发

如何分配返回的auto_ptr?

我正在尝试学习auto_ptr,因此我在下面编写了代码,但结果为 ..\src\main.cpp:23: error: no match for 'operator=' in 'p1 = source()()' 我做错了什么?您如何分配返回的auto_ptr? #include #include using namespace std; ..
发布时间:2020-06-21 19:52:45 C/C++开发

使用auto_ptr<>带阵列

我正在使用auto_ptr,它使用类指针类型的数组,因此如何为它分配一个值. 例如 auto_ptr arr[10]; 如何为arr数组分配值? 解决方案 您不能将auto_ptr与array一起使用,因为它会调用delete p而不是delete [] p. 您要 boost :: scoped_array 或其他一些boost :: smart_a ..
发布时间:2020-06-21 19:52:42 C/C++开发

有什么理由要使用auto_ptr吗?

从他的STL书中读到Jossutis对auto_ptr的解释后,我有一个很深刻的印象,那就是无论我尝试使用什么任务,由于许多auto_ptr的陷阱之一,我都会尝试100%失败. 我的问题是:在auto_ptr真的有用并且适合其中的现实生活中,有什么任务吗? 解决方案 很明显,auto_ptr对unique_ptr松动. 现在,在“没有增强的严格C ++ 03"世界中,我经常使用 ..
发布时间:2020-06-21 19:52:40 C/C++开发

auto_ptr是否已弃用?

在传入的C ++标准中会不建议使用auto_ptr吗? 应该将unique_ptr而不是shared_ptr用于所有权转让吗? 如果unique_ptr不在标准中,那么我是否需要使用shared_ptr? 解决方案 更新:此答案写于2010年,按预期std::auto_ptr已弃用.该建议完全有效. 在C ++ 0x中,不推荐使用std::auto_ptr,而推荐使用std::u ..
发布时间:2020-06-21 19:52:37 C/C++开发

auto_ptr的大小是多少?

auto_ptr是否具有与指针相同的大小? 我必须用boost::scoped_ptr代替它,我想知道这两种数据类型的大小是否相同. 解决方案 您只需执行以下操作即可轻松找出尺寸: #include #include #include #include ..
发布时间:2020-05-28 23:23:36 C/C++开发

什么是最好的方式来返回类似的`std :: auto_ptr`的集合在C ++ 03?

std :: auto_ptr 不允许存储在STL容器中,例如 std :: vector 。但是,偶尔有些情况下,我需要返回一个多态对象的集合,因此我不能返回一个对象的向量(由于切片问题)。我可以使用 std :: tr1 :: shared_ptr 并将它们粘贴在向量中,但是我必须支付维持单独引用计数的高价格,以及拥有实际内存(对象)的对象不再逻辑上“拥有”对象,因为它们可以被复制出来而不考虑 ..
发布时间:2016-12-15 21:14:52 C/C++开发

auto_ptr或shared_ptr等价于托管C ++ / CLI类

在C ++ / CLI中,您可以在托管类中使用本机类型,因为它不允许在托管类中保存本机类的成员:在这种情况下,您需要使用指针。 下面是一个例子: class NativeClass { 。 ... }; public ref class ManagedClass { private: NativeClass mNativeClass; // 不允许 ! ..
发布时间:2016-11-06 13:08:47 C/C++

包含auto_ptr的对象的std :: vector包含奇怪的行为

我想使用Qt库为我的应用程序创建控制面板,并为此创建类 控制类 控制:创建一个滑块,并旋转和标签,并以水平布局将它们合并。 但是当我想创建 std :: vector 程序运行没有错误,但现在控件是创建!因此为什么没有控件。 Controls.h 控件 { private: QHBoxLayout布局; string Control ..
发布时间:2016-11-03 00:40:19 C/C++开发

'auto_ptr'和STL容器:写一个错误使用的例子

阅读本教程后提出的这个问题: http://www.cprogramming。 com / tutorial / auto_ptr.html 您可以在其中找到以下语句:此行为的一个微妙后果是自动 _ ptrs在所有情况下都无法正常工作。例如,对标准模板库使用auto _ ptr对象可能会导致问题,因为STL中的某些函数可能会在容器(如矢量容器类)中复制对象。一个例子是排序函数,它使容器中的 ..
发布时间:2016-11-02 02:02:29 C/C++开发

不能继承auto_ptr没有问题

我想做的是: #include class autostr:public std :: auto_ptr { public: autostr(char * a):std :: auto_ptr(a){} autostr(autostr& a):std :: auto_ptr(a){} //定义一组字符串 ..
发布时间:2016-11-01 22:58:33 C/C++开发

C ++ std :: auto_ptr复制构造函数

std :: auto_ptr缺少const复制构造函数,因此我不能直接在集合中使用它。有没有一些方法可以有例如std :: auto_ptr的向量而不使用增强指针集合模板? 解决方案 C ++ 0x编译器,您可以根据需要使用 shared_ptr 或 unique_ptr 。 有正确的 unique_ptr 用法在这里感谢@James McNellis。对于 shared_ptr ..
发布时间:2016-10-29 22:36:51 C/C++开发

是否使用auto_ptr与新的char [n]

如果我使用声明一个临时的自动删除字符缓冲区,请使用 std :: auto_ptr buffer(new char [n]); 那么当缓冲区超出范围时,缓冲区会自动删除。我假设使用delete删除缓冲区。 但是缓冲区是使用new []创建的,所以严格来说,缓冲区应该使用delete []删除。 这种不匹配可能导致内存泄漏的可能性是什么? ..
发布时间:2016-10-25 17:22:25 C/C++开发

为什么vector.push_back(auto_ptr)不会编译?

我了解到,STL可以禁止程序员将auto_ptr放入容器中。例如下面的代码不能编译: auto_ptr a(new int(10)); vector > v; v.push_back(a); auto_ptr有复制构造函数,为什么这个代码甚至可以编译? 解决方案 查看 std的定义: :auto_ptr : ..
发布时间:2016-10-24 13:34:46 C/C++开发

为什么vector.push_back(auto_ptr)不会编译?

我了解到,STL可以禁止程序员将auto_ptr放入容器中。例如下面的代码不能编译: auto_ptr a(new int(10)); vector > v; v.push_back(a); auto_ptr有复制构造函数,为什么这个代码甚至可以编译? 解决方案 查看 std的定义: :auto_ptr : ..
发布时间:2016-10-24 13:30:50 C/C++开发