首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏fangyangcoder

    copy-and-swap idiom

    This answer is from https://stackoverflow.com/a/3279550/10133369 Overview Why do we need the copy-and-swap The copy-and-swap idiom is the solution, and elegantly assists the assignment operator in achieving two A successful solution As mentioned, the copy-and-swap idiom will fix all these issues. And that is the copy-and-swap idiom. What about C++11? And so concludes the copy-and-swap idiom. ---- Footnotes *Why do we set mArray to null?

    1.1K20发布于 2019-12-12
  • 来自专栏ClearSeve

    copy-and-swap 是什么

    问题 我发现 copy-and-swap 这个名词在很多地方都出现, What are your favorite C++ Coding Style idioms: Copy-swap Copy constructor 回答 为什么需要 copy-and-swap 呢? 任何资源管理类(比如智能指针)都需要遵循一个规则:三法则。 那 copy-and-swap 是怎么实现的呢?大致思路是:先用复制构造函数创建一个副本,然后利用函数swap交换其成员数据,当作用域退出,副本的析构函数会自动调用。 正确的做法 copy-and-swap 就可以同时解决上面的三个问题,做法是这样的, class dumb_array { public: // ... 而对于移动赋值(=),上面的 copy-and-swap 已经替我们做了,因为我们用的是值传递。 dumb_array& operator=(dumb_array other)

    1.1K20编辑于 2022-02-10
  • 来自专栏程序员

    C++异常安全保证:从理论到实践

    constSafeVector&other):pImpl(other.pImpl){}//移动构造函数SafeVector(SafeVector&&other)noexcept=default;//关键:copy-and-swap friendvoidswap(DesignGuidelines&,DesignGuidelines&)noexcept;//4.关键业务操作:提供强保证voidcriticalOperation(){//使用copy-and-swap 通过理解三种异常安全保证的区别,掌握copy-and-swap等惯用法,合理设计移动操作,并充分利用RAII模式,我们可以编写出既安全又高效的代码。

    20900编辑于 2025-12-07
  • 来自专栏程序员

    从「能用」到「可靠」:深入探讨C++异常安全

    一个强大的技术是"Copy-and-Swap"惯用法。 善用"Copy-and-Swap":这是实现强保证函数的一个通用且有效的方法。正确使用noexcept:为移动操作、swap和析构函数标记noexcept。严守铁律:决不让异常从析构函数中逃逸。

    1.2K10编辑于 2025-10-23
  • 来自专栏光城(guangcity)

    (大boss)C++惯用法之copy-swap

    std::endl; smart_ptr tmp(rhs); swap(rhs); return *this; } 实际上,我们比那个不需要多写代码move assignment,copy-and-swap

    1.8K20发布于 2019-12-29
  • 来自专栏iDoitnow

    C++避坑---赋值运算符函数中的自我赋值和异常控制

    使用copy-and-swap。 来防止自我赋值风险的产生和提高赋值运算符函数的异常控制能力。 参考文献 《Effective C++ 第三版》

    84910编辑于 2023-05-17
  • 来自专栏C++开发学习交流

    【C++】基础:Effective C++高效编程建议

    技巧包括比较 source(源)和 target objects(目标对象)的地址,关注语句顺序,和 copy-and-swap。 强力保证经常可以通过 copy-and-swap 被实现,但是强力保证并非对所有函数都可用。 一个函数通常能提供的保证不会强于他所调用的函数中最弱的保证。 30.

    91210编辑于 2024-07-24
  • 来自专栏ClearSeve

    什么是三法则

    其实,还有一个更好的办法可以解决这个问题:copy-and-swap,不过不在这里作深入讨论,读者可以跟随链接具体了解。

    81920编辑于 2022-02-10
  • 来自专栏CQ品势

    Effective C++: 改善程序与设计的55个具体做法

    其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap。 ■ 确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。 ■ “强烈保证”往往能够以 copy-and-swap 实现出来,但“强烈保证”并非对所有函数都可实现或具备现实意义。

    99420编辑于 2021-12-02
  • 来自专栏ClearSeve

    运算符重载的基本规则和习惯用法是什

    赋值运算符 赋值运算符 operator= 是一个经常被提及的运算符,需要修改左操作数,应该将其实现为成员函数,可参考 copy-and-swap

    1.1K10编辑于 2022-02-10
  • 【C++高级主题】异常处理(三):自动资源释放

    强保证:结合 RAII 与 “拷贝 - 交换”(Copy-And-Swap)模式,先操作临时对象,再原子交换到目标对象。

    19010编辑于 2026-01-21
  • 深入理解vector:模拟实现与现代C++技巧

    string部分的模拟实现一样,不懂为什么这么写的可以我前面string模拟实现的文章 1.2.4 赋值的现代写法(拷贝交换技术) 这段代码中vector赋值运算符的现代写法基于拷贝交换技术(Copy-and-Swap 在这个 ** 拷贝交换技术(Copy-and-Swap)** 的赋值写法中,参数没有加const修饰的原因是: 这个参数是按值传递的副本(vector< T > tmp),函数内部需要通过swap操作修改这个副本的资源

    11710编辑于 2025-12-30
  • 来自专栏CV学习史

    Effective C++笔记

    其中技术包括“来源对象”和“目标对象”的地址、精心周到的语句顺序以及copy-and-swap 确定任何函数如果操作一个以上对象,而其中多个对象是同一个对象时,其行为仍然正确 12.

    1.1K20发布于 2021-03-05
  • 来自专栏知识分享

    【探寻C++之旅】第十二章:异常

    复制-交换(Copy-and-swap)惯用法 操作时先修改副本,再交换,保证强异常安全。 尽量避免在析构函数中抛异常 析构函数应保证不抛异常,否则可能导致程序终止。 3.

    31010编辑于 2025-05-31
  • 来自专栏小二的折腾日记

    面试总结-C++

    特别是异常发生时的回滚机制的正确使用,copy-and-swap是有效的方法。 3.注意需要异常保证的函数内部的调用函数,异常安全等级是以有最低等级异常保证的函数确定的。

    2.6K11发布于 2018-08-02
  • 来自专栏yifei的专栏

    Effective_Cpp中的55个建议

    “强烈保证”往往能够以copy-and-swap实现出来,但“强烈保证”并非对所有函数都可实现或具备现实意义。

    91230编辑于 2022-11-14
  • 从零实现一个简化版string 类 —— 深入理解std::string的底层设计

    _data, _capacity); } return *this; } 关键点:自我检测避免 a = a 导致释放自身内存后再访问;先释放再分配可以在内存受限时出错(可进一步改进为 copy-and-swap

    17410编辑于 2025-12-18
  • 来自专栏用户9199536的专栏

    System|分布式|从Dubbo+Zookeeper开始实现分布式存储系统

    .invoke(invocation); } } return invokers.get(0); Data - 支持事务回退,All-or-nothing m是数据表,cas指的是Copy-And-Swap

    53240发布于 2021-11-22
  • 来自专栏小林coding

    学过 C++ 的你,不得不知的这 10 条细节!

    其中技术包括比较来源对象和目标对象的地址、精心周到的语句顺序、以及 copy-and-swap。 确保任何函数如果操作一个以上的对象,而其中多个对象是同个对象时,其行为忍然正常。

    1K20发布于 2020-03-31
领券