复制一个对象并使两者共享一个成员变量 (C++)

2023-12-12

我一直在思考和搜索这个问题,但我无法解决这个问题。 我想要一个对象,当复制到另一个对象时,两个对象共享某些成员变量。因此,当我更改 object1 的成员变量的值时,它也会更改 object2 中的变量。例子:

class ABC {
public:
    int a = 5;
    //...
}

int main() {
    ABC object1;

    ABC object2 = object1;

    object2.a = 7;      // now, object1.a is equal to 7
    object1.a = 10;     // now, object2.a is equal to 10
}

我了解复制构造函数,但我不确定它是否适用于此处或存在 更好的方法。我一直在考虑使用指针或引用,但无法成功。 请注意,我不希望所有对象共享相同的变量。


你需要的是一个指针。指针指向该对象,然后复制第一个对象的所有对象都只复制该指针,以便它们都指向同一对象。为了让生活变得轻松,我们可以使用std::shared_ptr为我们管理分配和取消分配。就像是:

#include <memory>

class Foo
{
private:
    std::shared_ptr<int> bar;
public:
    Foo() : bar(std::make_shared<int>()) {}
    int& getBar() { return *bar; }
};

int main()
{
    Foo a;
    a.getBar() = 7;
    Foo b = a;
    b.getBar() = 10;
    // now getBar returns 10 for both a and b
    Foo c;
    // a and b are both 10 and c is 0 since it wasn't a copy and is it's own instance
    b = c;
    // now b and c are both 0 and a is still 10
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复制一个对象并使两者共享一个成员变量 (C++) 的相关文章

  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 检查一个类是否是另一个类的子类

    我想在不创建实例的情况下检查一个类是否是另一个类的子类 我有一个类 它接收类名作为参数 作为验证过程的一部分 我想检查它是否属于特定的类系列 以防止安全问题等 有什么好的方法可以做到这一点吗 is subclass of http php
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 自定义声音远程推送通知 iOS 不起作用

    我正在尝试更改远程消息的声音 我已将文件添加到我的项目中 见图1 我还将所有内容添加到我的 AppDelegate 中 在 didFinishLaunchingWithOptions 中我添加了 if UIDevice currentDev
  • 即使添加 -fPIC 编译标志后,“使用 -fPIC 重新编译”错误仍然存​​在

    我已经下载了一些我想从源代码编译的 C 运行后cmake src进而make从命令行 在构建目录中 我收到以下错误 usr bin ld usr local lib libBulletCollision a btDbvtBroadphase
  • 寄存器的十六进制值? x86

    MOV DL AL MOV DL B2 但是 AL 的十六进制字节值是多少 这些在哪里列出 我刚刚意识到这一定是另一个操作码 有人能指出我正确的方向吗 来自英特尔架构软件开发人员手册 第 2 卷 指令集参考手册 表3 1 与 rb rw 和
  • 即使身份验证成功,PassportJS Facebook 登录 isAuthenticated 返回 false

    由于某种原因 在我的 NodeJS Express 应用程序上 当通过 PassportJS 库与 Facebook 进行身份验证时 无论身份验证是否成功并返回配置文件数据 都会调用request isAuthenticated 总是回来f
  • 如何自动检测串行COM端口的连接C#

    我有与设备通信的应用程序 设备通过串行 COM 端口连接 我的应用程序可以与设备通信 我需要一些方法 事件 可以通过运行应用程序扫描COM端口 当我将设备连接到 PC 时 方法 事件将打印带有消息 已连接 或类似内容的 MessageBox
  • 当焦点从 EditText 更改为 Button 时 ActionBarSherlock 操作栏消失

    我有一个简单的登录布局 其中包含两个 EditText 字段和一个用于登录的按钮 问题是 当软键盘打开并且我将焦点从 EditText 更改为按钮时 ActionBar 消失 当我按返回时 ActionBar 再次返回 当软键盘关闭并且我使
  • Sass mixin 添加到选择器前面

    是否可以制作一个 SASS mixin 将其输出添加到选择器之前 我用现代化检查浏览器的 svg 功能 它输出svg类到支持 svg 时的元素 我想要background image根据 svg 功能进行更改 基本上 这就是我所需要的 co
  • 在 jQuery 的 Deferred 对象中抛出错误

    我有一个 ajax承诺并想要检查我的 语法上有效的 响应是否包含错误 在这种情况下触发拒绝状态 我使用了自己的承诺库 它可以轻松处理此类任务 我不太喜欢 jQueryPromise cache 实施及其Deferred object可能忽略
  • Discord.py:使用变量作为 Discord 嵌入颜色

    所以我试图为我的不和谐机器人 一个嵌入构建器 发出一个命令 我希望命令的用户能够输入嵌入颜色的十六进制值 这是我尝试过的 value message content embed discord Embed title Hey descrip
  • 为什么 didSet 中没有无限循环?

    在我的 FirstViewController 中 我有一个指向 SecondViewController 的按钮 将数据传递到 SecondViewController 中的属性 该属性有一个属性观察者 在设置时创建 SecondView
  • Golang 将数组传递给函数并修改它

    在大多数语言 如 C 中 传递数组会导致通过引用隐式传递数组 因此对函数中传递的数组的任何更改都将导致原始数组的更改 我正在学习 Golang 在 Alan A A 的 Go 编程语言 一书中Donovan 和 Brian W Kernig
  • 在 SSRS 中,如何使用多值参数创建动态“where”条件

    首先我会提到一些我的工作以更好地理解我的问题 因此 在 SSRS 中 我有多个参数 所有这些参数都使用以下命令发送到过程 Join Parameter x value 然后在过程中我通过连接所有参数创建一个 where 条件 像这样的东西
  • 更改 Reveal.js 中的背景图像样式

    我尝试访问 Reveal js 中背景图像的样式有以下三个原因 a 我想在概览模式下覆盖背景图像 b 我想用 CSS 模糊一些背景 我发现两篇关于 SO 的文章对我有帮助 a 如何在reveal js中定位背景图片 b Reveal js
  • Azure Pipeline - 使用模板任务中设置的变量作为另一个模板任务中的参数

    我创建了两个模板 一个用于获取和设置一些配置 例如区域名称 另一个用于部署 我尝试使用配置模板任务中设置的变量作为部署模板的参数输入 有没有实际的方法可以做到这一点 我的配置模板 steps task AzureCLI 2 name Con
  • 如何在GCC trunk中使用

    From https github com gcc mirror gcc commit 3acb929cc0beb79e6f4005eb22ee88b45e1cbc1d提交 C 标准头
  • 在 PL/pgSQL 中动态执行查询

    我已经找到了我在 Oracle 和 SQL Server 上提出的问题的解决方案 我认为 但似乎无法将其转换为 Postgres 解决方案 我正在使用 Postgres 9 3 6 这个想法是能够生成有关表内容的 元数据 以用于分析目的 这
  • 连接两个 std::vector ——哪种方法更有效以及如何/为什么?

    考虑以下场景 std vector
  • 查找矩阵每行的最小元素 - MATLAB

    这是示例 我有以下矩阵 4 0 3 5 2 6 9 4 8 现在 我想找到两个最小值及其每行的索引 所以结果是 row1 0 position 1 2 and 3 position 1 3 row2 row3 嗯 我使用了很多 for 循环
  • 使用 Spark / java 的 ST_geomfromtext 函数

    由于 ST GeomFromText 不是 org apache spark sql functions 的一部分 因此它不会在内部识别它 我需要首先为此函数定义 UDF 意味着我需要定义该函数的定义 然后使用 Spark 将该函数注册为
  • 复制一个对象并使两者共享一个成员变量 (C++)

    我一直在思考和搜索这个问题 但我无法解决这个问题 我想要一个对象 当复制到另一个对象时 两个对象共享某些成员变量 因此 当我更改 object1 的成员变量的值时 它也会更改 object2 中的变量 例子 class ABC public