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

    C++11 改造观察者模式(参考 In-Depth C++11)

    / #include "pch.h" #include <functional> #include <iostream> #include <list> #include <map> class NonCopyable { protected: NonCopyable() = default; ~NonCopyable() = default; NonCopyable(const NonCopyable &) = delete; NonCopyable operator=(const NonCopyable&) = delete; }; template<typename F> class Events : public NonCopyable { public: Events() {} ~Events() {} // 注册观察者,支持右值引用 int Connect

    34420编辑于 2023-10-21
  • 来自专栏CPP开发前沿

    【C++11】 改进我们的设计模式---观察者模式

    在本次代码实现中,我们不希望新增的事件类型能够进行复制,因此,在实现时将会用=default和=delete标识符对类的特殊函数进行限制,改进后的观察者模式代码如下: class NonCopyable { protected: NonCopyable()=default; ~NonCopyable()=default; NonCopyable(const NonCopyable &)=delete; NonCopyable & operator =(const NonCopyable &) = delete; }; template <typename Func> class Event:NonCopyable{ public: Event()=default; ~Event()=delete; //注册观察者,支持右值引用 int

    1.4K31发布于 2021-11-16
  • 来自专栏全栈程序员必看

    可以对属性进行封装么_元器件封装类型

    include <thread> #include <memory> #include <pthread.h> #include <semaphore.h> #include <atomic> struct Noncopyable { Noncopyable() = default; ~Noncopyable() = default; Noncopyable(const Noncopyable&) = delete; Noncopyable & operator=(const Noncopyable&) = delete; }; /** * brief: 信号量 */class Semaphore : Noncopyable { public m_lock = false; } } private: T& m_mutex; bool m_lock = false; }; /** * brief: 互斥量 */ class Mutex : Noncopyable pthread_rwlock_unlock(&m_lock); } private: pthread_rwlock_t m_lock; }; /** * brief: 自旋锁 */ class SpinLock : Noncopyable

    47620编辑于 2022-11-16
  • 来自专栏开发与安全

    从零开始学C++之对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr<class>、实现Ptr_vector

    比如说int,C++中的内置类型都是值语义,前面学过的三个标准库类型string,vector,map也是值语义 2、对象语义指的是面向对象意义下的对象 对象拷贝是禁止的(Noncopyable)     NonCopyable() {}     ~NonCopyable() {} private:     NonCopyable(const NonCopyable &);     const  NonCopyable &operator=(const NonCopyable &); }; //抽象类,对象语义,禁止拷贝(首先需要拷贝NonCopyable) class Node : private  NonCopyable { public:     virtual double Calc() const = 0;     virtual ~Node(void) {} }; 注意NonCopyable 同样地,NonCopyable类的拷贝构造函数和赋值运算符为私有,故如 AddNode ad2(ad1); 编译出错。

    2K00发布于 2017-12-28
  • 来自专栏我的博客

    灵光一现的问题和常见错误1

    default; // 强制生成拷贝构造函数 MyClass(MyClass&&) = default; // 强制生成移动构造函数 }; (2) 禁用特定函数 class NonCopyable { public: NonCopyable() = default; NonCopyable(const NonCopyable&) = delete; // 禁止拷贝 NonCopyable & operator=(const NonCopyable&) = delete; }; V.

    11310编辑于 2025-12-22
  • 来自专栏开发与安全

    从零开始学C++之对象语义与值语义、资源管理(RAII、资源所有权)

    NonCopyable() {} ~NonCopyable() {} private: NonCopyable(const NonCopyable &); const NonCopyable &operator=(const NonCopyable &); }; //抽象类,对象语义,禁止拷贝(首先需要拷贝NonCopyable) class Node : private NonCopyable { public: virtual double Calc() const = 0; virtual ~Node(void) {} }; 注意NonCopyable 类的构造函数声明为protected,则不能直接构造对象,如NonCopyable nc; // error 但在构造派生类,如最底层的AddNode类时,可以被间接调用。 同样地,NonCopyable类的拷贝构造函数和赋值运算符为私有,故如 AddNode ad2(ad1); 编译出错。

    1.4K20发布于 2019-05-25
  • 来自专栏C++11

    C++11 defaulted和deleted函数从入门到精通

    以下是一个禁止类拷贝操作的示例:#include <iostream>class NonCopyable {public: // 默认构造函数 NonCopyable() = default ; // 拷贝构造函数,禁止拷贝 NonCopyable(const NonCopyable&) = delete; // 拷贝赋值运算符,禁止拷贝赋值 NonCopyable& operator=(const NonCopyable&) = delete; // 析构函数 ~NonCopyable() = default; int data;};int main () { NonCopyable obj1; obj1.data = 10; // 以下代码会导致编译错误,因为拷贝构造函数被删除 // NonCopyable obj2(obj1 “=delete;”显式地删除了拷贝构造函数和拷贝赋值运算符,这样就禁止了NonCopyable类的对象被拷贝。

    38110编辑于 2025-06-04
  • 来自专栏开发与安全

    muduo网络库学习之ThreadLocal<T> 类、ThreadLocalSingleton<T>类封装知识点

    template<typename T> class ThreadLocal : boost::noncopyable ? muduo/base/ThreadLocal.h> #include <muduo/base/Thread.h> #include <boost/bind.hpp> #include <boost/noncopyable.hpp > #include <stdio.h> class Test : boost::noncopyable { public:     Test()     {         printf("tid= debug/bin$  二、ThreadLocalSingleton<T>类 template<typename T> class ThreadLocalSingleton : boost::noncopyable > #include <stdio.h> class Test : boost::noncopyable { public:     Test()     {         printf("tid=

    1.4K00发布于 2017-12-28
  • 来自专栏Linux兵工厂

    C++中final、override关键字和=default、=delete语法

    class NonCopyable { public: // 删除拷贝构造函数 NonCopyable(const NonCopyable&) = delete; // 删除拷贝赋值运算符 NonCopyable& operator=(const NonCopyable&) = delete; }; 在上述例子中,NonCopyable 类不允许被复制,因为拷贝构造函数和拷贝赋值运算符被删除

    1K10编辑于 2024-02-17
  • 来自专栏开发与安全

    muduo网络库学习之BlockinngQueue<T>类、ThreadPool 类、Singleton类封装中的知识点

    ,4(外框) 消费者: 信号量+互斥锁:1,2,3,4 条件变量+互斥锁:2,1,3,4(外框) template<typename T> class BlockingQueue : boost::noncopyable template<typename T> class BoundedBlockingQueue : boost::noncopyable ? class ThreadPool : boost::noncopyable typedef boost::function<void ()> Task; ? >重载了[], 即 T& operator[]( size_type n ); 三、singleton类 template<typename T> class Singleton : boost::noncopyable

    1.2K00发布于 2017-12-28
  • 来自专栏Yunfeng's Simple Blog

    c++11新特性:default和delete

    C++11里面可以用default来指定使用默认的构造函数,而且可以通过delete来显式地禁止一些方法,如复制构造函数和复制赋值操作,如下例: struct NonCopyable{ NonCopyable () = default; NonCopyable(const NonCopyable&) = delete; NonCopyable& operator=(const NonCopyable&)

    1.5K30发布于 2019-12-25
  • 来自专栏开发与安全

    muduo网络库学习之MutexLock类、MutexLockGuard类、Condition类、CountDownLatch类封装中的知识点

    一、MutexLock 类 class MutexLock : boost::noncopyable 二、MutexLockGuard类 class MutexLockGuard : boost::noncopyable 三、Condition类 class Condition : boost::noncopyable 某个线程: 加锁                                           得到通知返回前重新加锁 解锁 另一个线程: 加锁      更改条件      通知notify(可以移到锁外) 解锁 四、CountDownLatch类 class CountDownLatch : boost::noncopyable

    1.3K00发布于 2017-12-28
  • 来自专栏开发与安全

    从零开始学C++之对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr<class>、实现Ptr_vector

    比如说int,C++中的内置类型都是值语义,前面学过的三个标准库类型string,vector,map也是值语义 2、对象语义指的是面向对象意义下的对象 对象拷贝是禁止的(Noncopyable) NonCopyable() {} ~NonCopyable() {} private: NonCopyable( const NonCopyable &); const NonCopyable & operator=( const NonCopyable &); }; //抽象类,对象语义,禁止拷贝(首先需要拷贝NonCopyable) class Node : ; 注意NonCopyable 类的构造函数声明为protected,则不能直接构造对象,如NonCopyable nc; // error 但在构造派生类,如最底层的AddNode类时,可以被间接调用 同样地,NonCopyable类的拷贝构造函数和赋值运算符为私有,故如 AddNode ad2(ad1); 编译出错。

    94110编辑于 2022-01-05
  • 来自专栏17的博客分享

    代码背后的哲思:C++特殊类实现的艺术与科学

    1.3 实现方式 #include <iostream> class NonCopyable { public: NonCopyable() { std::cout << "Constructor called" << std::endl; } ~NonCopyable() { std::cout << "Destructor called" << std::endl ; } // 禁止拷贝构造 NonCopyable(const NonCopyable&) = delete; // 禁止拷贝赋值 NonCopyable& operator =(const NonCopyable&) = delete; }; int main() { NonCopyable obj1; // 正常创建对象 // NonCopyable

    34710编辑于 2024-12-20
  • 来自专栏用户2442861的专栏

    muduo 5 网络库学习之MutexLock类、MutexLockGuard类、Condition类、CountDownLatch类封装中的知识点

    一、MutexLock 类 class MutexLock : boost::noncopyable ? 二、MutexLockGuard类 class MutexLockGuard : boost::noncopyable ? 三、Condition类 class Condition : boost::noncopyable ? 得到通知返回前重新加锁 解锁 另一个线程: 加锁      更改条件      通知notify(可以移到锁外) 解锁 四、CountDownLatch类 class CountDownLatch : boost::noncopyable

    1.1K10发布于 2018-09-20
  • 来自专栏yifei的专栏

    基础知识_Cpp

    noncopyable禁止拷贝 1.通用的做法是写一个类noncopyable,凡是继承该类的任何类都无法复制和赋值。 #include <bits/stdc++.h> using namespace std; class noncopyable { protected: noncopyable() = default ; ~noncopyable() = default; private: noncopyable(const noncopyable&) = delete; const noncopyable & operator=( const noncopyable& ) = delete; }; class StockFactory:noncopyable{ public: StockFactory ()=default; ~noncopyable()=default; noncopyable(const noncopyable &)=delete; noncopyable

    2.6K30编辑于 2022-11-14
  • 【C++类和数据抽象】复制构造函数

    return 0; } 六、复制构造函数的高级特性 6.1 防止对象复制:删除复制构造函数 通过将复制构造函数声明为delete,可以禁止对象的复制(C++11 及以后): class NonCopyable { public: NonCopyable() = default; NonCopyable(const NonCopyable&) = delete; // 禁止复制构造 NonCopyable & operator=(const NonCopyable&) = delete; // 禁止拷贝赋值 }; int main() { NonCopyable obj1; NonCopyable

    14310编辑于 2026-01-21
  • 来自专栏我的博客

    【C++11】可变参数模板和新增类功能

    与C++98方式的对比 C++98做法: class NonCopyable { private: NonCopyable(const NonCopyable&); // 只声明不实现 NonCopyable& operator=(const NonCopyable&); }; 这种方式的缺点: 需要在链接阶段才能发现错误 语法不够直观 需要将函数声明为private C++11做法: class NonCopyable { public: NonCopyable(const NonCopyable&) = delete; NonCopyable& operator= (const NonCopyable&) = delete; }; 优点: 编译时就能发现错误 语法更清晰直观 可以应用于任何函数(包括普通成员函数) 典型应用场景 禁止拷贝: class UniqueResource

    22810编辑于 2025-12-22
  • 来自专栏开发与安全

    muduo网络库学习之Logger类、LogStream类、LogFile类封装中的知识点

    template<int SIZE> class FixedBuffer : boost::noncopyable ? class LogStream : boost::noncopyable { typedef LogStream self; public:                                         class Fmt // : boost::noncopyable { public:   template<typename T>   Fmt(const char* fmt, T val 一个典型的日志文件名 logfile_test.20130411-115604.popo.7743.log // 运行程序.时间.主机名.线程名.log class LogFile : boost::noncopyable * kRollPerSeconds_; 表示start对齐到kR的整数倍,也就是时间调整到当天零时 // not thread safe class LogFile::File : boost::noncopyable

    1.6K100发布于 2018-01-03
  • 来自专栏c++线程池

    C++写高性能的任务流线程池(万字详解!全面解析!)

    queue> #include <thread> template<typename T> class __attribute__((unused)) WorkStealingQueue : boost::noncopyable SBasic/Operator.h" template<typename T> class __attribute__((unused)) AtomicPriorityQueue : boost::noncopyable condition_variable> template<typename T> class __attribute__((unused)) AtomicRingBufferQueue : boost::noncopyable TaskFlow\SBasic\TypeConver.hpp" template<typename T> class __attribute__((unused)) RunningThread : boost::noncopyable include <condition_variable> template<typename T> class __attribute__((unused)) AtomicQueue : boost::noncopyable

    96331编辑于 2024-10-17
领券