包含存储在向量中的 auto_ptr 的类

2023-12-13

在回答中将具有 std::auto_ptr 作为其成员变量的类的对象存储在 std::vector 中是否安全?我说过包含 auto_ptr 的类可以存储在向量中假设该类有一个用户定义的复制构造函数.

有一些评论表明情况并非如此,因此这个问题是试图澄清问题。考虑以下代码:

#include <memory>
#include <vector>
using namespace std;

struct Z {};

struct A {

    A( Z z ) 
        : p( new Z(z) ) {} 

    A( const A & a ) 
        : p( a.p.get() ? new Z( *a.p.get()) : 0 ) {}

    // no assigment op or dtor defined by intent

    auto_ptr <Z> p;
};

int main() {
    vector <A> av;              
    Z z;                    
    A a(z);
    av.push_back( a );      
    av.push_back( A(z) );   
    av.clear();             
}                           

请检查上述内容并在您的回复中指出未定义的地方 对于以这种特定方式使用的特定类,可能会出现 C++ 标准含义中的行为。我不感兴趣这个类是否有用、行为良好、可排序,或者它在异常情况下的表现如何。

另请注意,这不是关于创建 auto_ptrs 向量的有效性的问题 - 我很清楚与此相关的问题。

感谢大家的意见 回顾过去可能是相当愚蠢的 问题。我想我太专注了 在复印机上并忘记了 任务。我的幸运获奖者 接受分数(分数意味着 奖品!)是litb对于一个典型的 详尽的解释(抱歉 耳柳克)


存储在容器中的对象需要“可复制构造”和“可分配”(C++2008 23.1/3)。

你的类尝试处理 CopyConstructable 要求(尽管我认为它仍然不满足它 - 我编辑了该参数,因为它不是必需的,而且我认为它是有争议的),但它不处理可分配的要求。要可分配 (C++2008 23.1/4),以下条件必须为真:t是一个值T and u是一个值(可能是const) T:

t = u返回一个T& and t相当于u

该标准还在注释(20.4.5/3)中说:“auto_ptr不满足标准库容器元素的可复制构造和可分配要求,因此使用以下实例实例化标准库容器auto_ptr导致未定义的行为。”

由于您没有声明或定义赋值运算符,因此将提供一个隐式赋值运算符,该运算符使用auto_ptr的赋值运算符,这肯定使得t不等于u,更不用说它根本不起作用“const T u“ 价值观(这就是厄维克的回答指出 - 我只是指出标准的确切部分)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

包含存储在向量中的 auto_ptr 的类 的相关文章

随机推荐

  • 在重定向之前在 HTTP 中添加自定义标头

    有没有办法在 javascript 触发的 HTTP 重定向中添加自定义 HTTP 标头 我正在寻找可以将自定义标头元素添加到任何重定向的东西 有一种方法可以通过 AJAX 请求来做到这一点 如何使用 js 或 jQuery 将自定义 HT
  • 如何将文件重命名为 google Drive Rest api?改造2

    在Google文档中没有写到它 我使用的是retrofit 2 Help 写下应该发送什么请求以及传输什么参数 界面 PATCH drive v3 files fileId Multipart Call
  • 如何在 Java 中生成连续整数的列表或数组?

    有没有一种简短而甜蜜的方法来生成List
  • Django 1.5 升级后 STATIC_URL 不起作用

    我可能只是累了 没有注意到这里明显的东西 但升级到 Django 1 5 后 我的静态文件的路径被破坏了 设置 py from os path import abspath basename dirname join normpath SI
  • 基质填充块

    在我的课堂上 我们必须制作一个矩阵填充程序 但我对如何使用用户输入来做到这一点感到非常困惑 而且我根本不知道如何做 我尝试开始编码 但无法完成第 1 步 package question4 import java util Random i
  • R,data.table:对名称存储在向量中的所有列求和

    来自数据表d例如 require data table d data table a 1 4 b 11 14 c 21 24 group c 1 1 2 2 我想对名称存储在向量中的所有变量求和varsToSum通过独特的价值观group
  • 如何通过XSLT消除所有和所有attribute=""?

    In a xsl stylesheet我有这种 类似身份 的转换 以消除注释 空 终端 标签和空属性 但是second xsl when不行
  • 如何在 iPhone 中单击按钮时调用 pin 注释

    我不希望直接在地图上调用图钉 我希望通过按钮操作调用图钉注释 当我在按钮单击事件上调用此方法时 我的应用程序崩溃了 我想在单击按钮时调用注释 我可以在按钮上调用所有方法吗 MKAnnotationView mapView MKMapView
  • “不包含四个或更多重复字符”的正则表达式

    我对正则表达式的经验有限 我一直在阅读有关否定和否定前瞻等的各种教程和帖子 但似乎没有什么与我的情况完全匹配 我正在尝试创建一个属性ASP NET MVC3对于密码复杂性 验证的一部分包括最小数量的重复字符 对于当前项目来说 限制是 3 但
  • 将按钮添加到 ui 导航控制器底部栏

    我可以使用以下代码取消隐藏导航控制器底部栏 self navigationController setToolbarHidden NO 但现在我想更改底部栏的颜色 并向该底部栏添加按钮 任何人都可以帮助我如何做到这一点 是否有任何委托方法
  • 水平滚动整个列表视图

    我有一个自定义列表视图 其中包含 14 个字段 如下所示 字段1 字段2 字段3 字段4 字段5 字段6 字段7 字段8 字段9 字段10 字段11 字段12 字段13 字段14 现在明显的问题是我不可能在屏幕上显示所有字段 所以我想让整个
  • python 3 IDLE 中的“语法错误:语法无效”

    为什么这是语法错误 我该如何解决它 class Queue Queue is basicliy a List def init self self queue add to the top of the list the left side
  • C# UTC 到用户当地时间

    我有一个用户可以发帖的网站 用户可能来自全球各地 因此当他们发帖时 我将发布日期存储为 DateTime UtcNow 我正在使用 JQuery 时间前插件来显示类似于堆栈溢出的发布数据 1 分钟前等 但我不确定如何将系统中存储的日期转换为
  • 如何更改相对布局边框颜色?

    如何更改相对布局边框颜色 这是我下面的代码 我只想显示边框颜色黑色 但显示所有相对布局黑色 我只想显示相对布局白色 只有边框是黑色我该怎么办
  • HTML 表单:完成文本字段后将焦点放在复选框上

    查看此 HTML 表单并注意它在文本字段之间有一个复选框 我尝试在移动设备上使用 Chrome 来填充它 并注意到一个意想不到的问题 如果用户在文本字段中键入内容 然后通过按 Android 键盘中的蓝色 完成 按钮移动到下一个字段 焦点将
  • C++读取csv文件并将值分配给数组

    我正在尝试读取 csv 文件并将值分配给二维数组 但我得到了奇怪的结果和一些垃圾值 虽然第一行是正确的 但第二行和第三行就变得奇怪了 下面是代码 include pch h include
  • 将 MySQL 数据库导入 SQL Server

    我有一个 sql来自 MySQL 转储的文件 其中包含表 定义和要插入这些表中的数据 如何将转储文件中表示的数据库转换为 SQL Server 数据库 Use SQL Server 迁移助手 SSMA 除了 MySQL 之外 它还支持 Or
  • 在 Java 中为变量分配新值

    我是 Java 新手 有一个关于变量的问题 这是一个例子 int hello 6 int goodbye 7 int combined hello goodbye System out println combined hello 10 S
  • 您能解释一下 bash shell 中的数学语法吗?

    for i in 1 99 do if i 2 eq 1 then echo i fi done 我正在学习 bash 并且我正在尝试更好地理解第 3 行 为什么 i 2 必须用括号双层包裹 为什么我不能把 旁边的符号i like i 2
  • 包含存储在向量中的 auto_ptr 的类

    在回答中将具有 std auto ptr 作为其成员变量的类的对象存储在 std vector 中是否安全 我说过包含 auto ptr 的类可以存储在向量中假设该类有一个用户定义的复制构造函数 有一些评论表明情况并非如此 因此这个问题是试