首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++】泛型编程 ⑮ ( 模板示例 - 数组模板 | 自定义中持有指针成员变量 )

一、支持 数组模板 存储的 自定义 1、可拷贝和可打印自定义 在上一篇博客 中 , 定义了 可拷贝 与 可打印自定义 Student , 可以被存放到 数组模板 中 ; 由于其 成员变量...out << "name : " << s.m_name << " , age : " << s.m_age << " ; "; return out; } 2、改进方向 本篇博客中 , 开始讨论 自定义...中是 char* 类型指针的情况 , 这里涉及到了 堆内存分配 以及 深拷贝 问题 ; 如果将上述 Student 中的 char m_name[32] 数组成员 , 改为 char* m_name...; 为了使用 cout 打印对象 , 需要 进行 左移 << 运算符重载 ; 3、改进方向 - 构造函数 在的 无参构造函数 和 有参构造函数中 , 使用 new 关键字 , 自动在堆内存中分配内存...new 关键字申请的 堆内存进行释放 , 这里必须使用 delete 进行释放 ; 使用 malloc 申请的堆内存 , 必须使用 free 进行释放 ; 使用 new 申请的堆内存 , 必须使用 delete

13510

C++使用new来初始化指向指针

C++使用new来初始化指针 1.ClassName * p = new ClassName; 调用默认构造函数。...();` 此时打印出来值是 0 3.ClassName * p = new ClassName(arg); 调用自定义构造函数,或含参数的默认构造函数(如果这两种函数都定义了,它们的arg类型必须不同,...非默认构造函数称为自定义构造函数。 如果在一个里,两种默认构造函数都写了,那么new ClassName和new ClassName()都不可用。因为编译器无法确定要使用哪一个构造函数。...C++指针初始化问题 c++中的指针是一个很经典的用法,但是也是最容易出错的,比如定义了一个指针,必须对其进行初始化,不然这个指针指向的是一个未知的内存地址,后续对其操作的时候,会报错。...下面就总结一下c++指针初始化的一些方法,以及我自己遇到的一些问题以及心得体会。

27320
您找到你想要的搜索结果了吗?
是的
没有找到

spdLog使用

支持跨平台 – Linux / Windows on 32/64 bits 可每日生成日志文件 daily_file_sink 每天定时产生文件日志 支持控制台日志输出 可选的异步日志 支持日志输出级别 可自定义日志格式...二.基本使用 1.直接打印日志到console auto console1 = spd::stdout_logger_mt("console1"); console1->error("Some error...void lock() {} void unlock() {} bool try_lock() { return true; } }; 其实,他是使用了一个去模拟锁的函数...daily_file_sink) sink创建和使用(稍微介绍了下单例模式) log_msg的原理介绍(缓冲区存储日志内容) 3.spdLog使用example...这是spdLog自带的一个example,教你如何使用sink去写log 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152329.html原文链接:https:

1.6K21

spdlog学习笔记

"); 这样就创建了一个console logger,并以”some_unique_name”作为它的id,将自身注册到spdlog,返回自身的智能指针 使用spdlog::get("...")访问loggers...loggers可以在任何地方使用线程安全的spdlog::get("logger_name")来进行访问,返回智能指针 注意:spdlog::get可能会拖慢你的程序,因为它内部维护了一把锁,所以要谨慎使用...sink,你需要实现sink的接口 一种推荐的方式是继承自base_sink 该类已经处理了线程锁,使得实现一个线程安全的sink非常容易 #include "spdlog/sinks/base_sink.h...或sink时可能会抛出异常,因为它认为出了严重错误 如果在日志记录过程中发生了错误,spdlog打印错误信息到stderr 为了避免满屏幕大量打印错误信息,限制速率为每个logger 1 条消息/分钟...fmt::print(stderr, "[*** LOG ERROR ***] [{}] [{}] {}\n", date_buf, name(), msg); 如何在dll中使用spdlog ---

1.1K21

Log:Spdlog初探(1)

轻量,仅有头文件/编译,C++日志库。 注意:Spdlog包含了C++11特性,需使用支持C++11特性的编译器。 安装/使用 Header only version 只是用头文件版本。...spdlog允许自定义样式参数设置。...}; 2.日志打印函数 //全局注册函数使用方法,使用如下方法默认输出终端/控制台 //info(""); 类似于 printf(),默认参数设置已经完成,()内为具体消息。...主要想使用 backstrac/dump功能,结果不是预计中,项目奔溃/出错,在日志最后打印错误堆栈信息。测试时还是使用系统信号测试使用。...简单的代码片段 主要功能是,根据系统错误信号,打印错误日志,堆栈日志。其实想法是,每一个设置对应的信号,错误输出,然后建立一个全局的错误处理。只停留于想法,没有时间做具体的实现。

60030

Log:Spdlog初探(1)

轻量,仅有头文件/编译,C++日志库。 注意:Spdlog包含了C++11特性,需使用支持C++11特性的编译器。 安装/使用 Header only version 只是用头文件版本。...spdlog允许自定义样式参数设置。...n_levels }; 2.日志打印函数 //全局注册函数使用方法,使用如下方法默认输出终端/控制台 //info(""); 类似于 printf(),默认参数设置已经完成,()内为具体消息。...主要想使用 backstrac/dump功能,结果不是预计中,项目奔溃/出错,在日志最后打印错误堆栈信息。测试时还是使用系统信号测试使用。...简单的代码片段 主要功能是,根据系统错误信号,打印错误日志,堆栈日志。其实想法是,每一个设置对应的信号,错误输出,然后建立一个全局的错误处理。只停留于想法,没有时间做具体的实现。

77330

C++ 开发中,使用模板实现自定义数组

需求描述: 通过使用 C++模板的特性,实现一个能够存储任意类型的数组。可以通过在尾部追加的方式在数组中完成数据传入,且可以通过尾部操作删除数组最后一个元素。...,此无参构造函数不可省略,也可以使用自定义无参构造函数 Demo(int id, string name) : m_id(id), m_name(name) {} int get_id...demo demo 数组中的第1个元素的值为:0 demo 数组中的第2个元素的值为:1 demo 数组中的第3个元素的值为:2 demo 数组中的第4个元素的值为:3 在数组中插入自定义类型: 自定义类型数组中的第...1个人的 id 为:1 姓名为:赵云 自定义类型数组中的第2个人的 id 为:3 姓名为:刘备 自定义类型数组中的第3个人的 id 为:2 姓名为:诸葛亮 Note: 自定义类型数组中的无参构造函数不能省略...]': /cygdrive/h/workspaces/c++/example/main.cpp:135:28: required from here /cygdrive/h/workspaces/c

84910

C++】异常处理 ⑥ ( 异常生命周期 | 抛出自定义对象异常 | 自定义对象异常的生命周期 | 抛出 自定义引用类型 异常 | 抛出 自定义指针类型 异常 )

一、C++ 异常处理 - 抛出自定义对象异常 1、抛出 异常对象 如果 抛出的 指针类型 , 指向的是 实际的对象 , 那么就要涉及到 对象的 内存空间的 分配 与 释放 ; 涉及到 内存空间 的 申请...和 释放 , 就需要考 讨论 异常 的生命周期 , 什么时候申请内存 , 什么时候释放内存 ; 2、代码示例 - 抛出 异常对象 下面的代码中 , 声明了 3 个自定义 Exception1 , Exception2..., Exception3 ; 在不同的时机 , 抛出不同的 自定义 对象 ; 抛出异常 , 直接使用 throw 关键字抛出 , Exception1 对象在抛出时创建 ; throw Exception1...三、C++ 异常处理 - 抛出 自定义引用类型 异常 1、不能同时拦截 对象类型 和 引用类型 在 try-catch 代码块中 , 不能同时拦截 对象类型 和 引用类型 , 系统会将这两种类型 看做...四、C++ 异常处理 - 抛出 自定义指针类型 异常 1、可以同时拦截 指针类型 和 引用类型 在 try-catch 代码块中 , 可以同时拦截 指针类型 和 引用类型 的 异常 , 系统会将这两种类型

15410

【系列教程】高性能服务设计思路

-经过前面3节,我们已经具备了开发一个高性能服务的基础知识,并且还能搭建一个比较好用的C++开发环境。...、所在线程id、代码位置这些信息都打印出来。...-Custom-formattingspdlog::set_pattern("[%@ %H:%M:%S:%e %z] [%^%L%$] [thread %t] %v");// 打印日志SPDLOG_INFO...ccache的原理和安装使用在《day03 C++项目开发配置最佳实践》中有具体介绍,这里就不过多废话了。命名规则原谅我这该死的代码洁癖,项目会规定一些命名规则,让代码读起来更优雅。。。.../文件名:全部小写,单词之间通过下划线连接,C++文件用.cpp结尾,头文件用.h结尾类型/结构体:每个单词首字母均大写,如:MyExcitingClass变量名:全部小写, 单词之间用下划线连接;的私有成员变量以下划线结尾函数名

709120

-日志记录库SPDLog简介

; 可自定义文档大小; 可将不同级别的信息输出到不同日志文件; 多平台等。...日志记录槽sink spdlog定义了几种sinks用于不同场景(也可自定义)下的日志输出,sink中主要包含: set_pattern(const std::string&):设置日志输出的内容格式。.../B 二进制 d 数字(十进制) o 八进制 x/X 十六进制 a/A 十六进制浮点数(p表示指数) e/E 科学计数 f/F 浮点数(包括NAN,INF),固定小数位数输出 g/G 浮点数输出 p 指针...│ └────────────────────┘ spdlog使用 spdlog默认日志输出级别是INFO。...当队列满时,会根据设定策略处理: 异常处理 当输出日志时发生异常时,spdlog会向std::err 打印一条语句,为了避免输出的异常语句刷屏,打印频率被限制在每分钟一条。

7.4K61

C++】泛型编程 ⑭ ( 模板示例 - 数组模板 | 容器思想 | 自定义可拷贝 - 深拷贝与浅拷贝 | 自定义打印 - 左移运算符重载 )

一、容器思想 1、自定义可拷贝 - 深拷贝与浅拷贝 上一篇博客 【C++】泛型编程 ⑬ ( 模板示例 - 数组模板 | 构造函数和析构函数 的 声明与实现 | 普通成员函数 的 声明与实现 | 外部友元函数...char m_name[32] 是 在定义时 , 直接分配好的 , 如果 自定义 中有 指针类型的成员变量 , 如 char* m_name , 涉及到 动态分配内存 , 如果没有定义 拷贝构造函数..., 定义了 char* m_name 成员变量 , 涉及到 动态分配内存 , 那么 该自定义 必须自己实现 深拷贝 的 拷贝构造函数 ; 编写的 , 可以存储到 数组模板 容器 中 , 那么 该类...name : " << m_name << " , age : " << m_age << endl; } private: char m_name[32]; int m_age; }; 3、自定义打印...- 左移运算符重载 数组模板 中 , 实现了 左移运算符 打印日志 , 如果 数组中 存储 自定义对象 想要通过 cout 打印出来 , 那么 该自定义 必须 进行 左移运算符重载操作 ; 声明

16510

C++】运算符重载案例 - 字符串 ③ ( 重载 左移 << 运算符 | 自定义使用技巧 | 直接访问的私有指针成员 | 为指针分配指定大小内存并初始化 0 )

一、重载 左移 << 运算符 1、左移 << 运算符作用 左移运算符重载 , 可参考 【C++】运算符重载 ⑧ ( 左移运算符重载 | 友元函数 / 成员函数 实现运算符重载 | 对象 使用 左移运算符...out 输出流中 out << s.m_p << endl; // 该返回值还需要当左值使用 return out; } 同时 , 还要在 String 中 , 将上述函数声明为 String...的 友元函数 ; class String { // 使用 全局函数 实现 左移运算符 << 重载 // 将全局函数 声明为 String 的友元函数 friend ostream& operator...<<(ostream& out, String& s); } 二、自定义使用技巧 ---- 1、直接访问的私有指针成员 在开发中 , 自定义了一个 class , 其中定义了 指针 类型的 成员变量...using namespace std; // 导入自定义的 String #include "String.h" int main() { // 调用无参构造函数 String s1;

14110

day04 高性能服务设计思路

、所在线程id、代码位置这些信息都打印出来。...项目的include目录下 代码使用 // 因为在CMakeLists中已经`include_directories(${PROJECT_SOURCE_DIR}/include)`, // 表示在索引头文件时会查找到根目录下的...-Custom-formatting spdlog::set_pattern("[%@ %H:%M:%S:%e %z] [%^%L%$] [thread %t] %v"); // 打印日志 SPDLOG_INFO...ccache的原理和安装使用在《day03 C++项目开发配置最佳实践》中有具体介绍,这里就不过多废话了。 命名规则 原谅我这该死的代码洁癖,项目会规定一些命名规则,让代码读起来更优雅。。。...;的私有成员变量以下划线结尾 函数名:常规函数名中每个单词首字母均大写,如:AddTableEntry;对于的私有方法,首字母小写。

30040

c++日志库实战——spdlog,是不是感觉log4cxx有点笨重,不妨试一试spdlog

c++日志库实战——spdlog,是不是感觉log4cxx有点笨重,不妨试一试spdlog 背景 更新记录 spdlog是什么 spdlog快速入门 编译 CMake手动方式 Vcpkg全自动方式...(推荐) 原生用法 实战代码 SpdlogWarper 使用 常见问题 打印行号 怎么控制台看不到log 同时输出控制台和文件 文件按天分割 停止调试log没有写文件?...更新记录 2021.05.14 增加封装spdlog头文件,快速集成到项目 2021.05.14 通过vcpkg编译安装,1秒集成使用,推荐 spdlog是什么 Fast C++ logging library...按照官方介绍,是一个高性能的C++日志组件,支持跨平台,兼容 C++11。...// spd 带行号的打印,同时输出console和文件 #define DEBUG(...)

1.3K30

(转载非原创)从新建文件夹开始构建UtopiaEngine(2)

接下来就是解决方案,我们现在来创建一个应用程序接口,其实接口这个说法并不怎么严谨,按照严格OOP规则,接口内是不允许有方法实现的,但C++在这方面并不怎么“守规矩”以及我们的引擎核心有时也要实现其相关方法...最后运行结果应该是如下几句(前两句打印完后其实是会不再打印的,原因是我为循环设的条件为true,这时为了显示下面两句(运行析构,强制性关闭并不会运行析构),可以考虑加入某些循环成立条件): BaseApplication...,分别对应不同的提示颜色,你可以增加类型并自定义颜色,而且你甚至可以不仅让日志输出在控制台上,你也可以让它输出在任何你想要的界面上,不过鉴于本人技术力太过生草以及本引擎的体量,使用默认的设置就足以完成我们的需求...: // 由于日志系统的代码可以说几乎在引擎中的所有地方都会调用,如果使用非静态成员,那每次调用都要在相应中 // 设定一个日志的成员对象,浪费了内存资源不说,可能还会造成不可必要的麻烦...sLogInfo); static void InfoLog(int _iLogType, string _sLogInfo); private: // 关于这里我为什么使用智能指针

82100

java 自定义加载器_JAVA中如何使用应用自定义加载器「建议收藏」

最近在研究java CLASS LOADING技术,已实现了一个自定义的加载器。对目前自定义加载器的应用,还在探讨中。下面是自定义的CLASSLOADER在JAVA加密解密方面的一些研究。...利用自定义的CLASSLOADER JAVA中的每一个都是通过加载器加载到内存中的。对于加载器的工作流程如下表示: 1.searchfile() 找到我所要加载的文件。...从这个过程中我们能很清楚的发现,自定义加载能够很轻松的控制每个文件的加载过程。...谁拥有它,谁就能解开我们的文件。...SecretKey key = kg.generateKey(); // 获取密钥数据 byte rawKeyData[] = key.getEncoded(); // 将获取到密钥数据保存到文件中,待解密时使用

91420

CMake---优雅的构建CC++软件项目实践(1)

首先说明的是本篇文章不从cmake的整个语法上去讲述,而是从一个实际项目的构建上入手,去了解如何优雅的去构建一个软件项目,搭建一个C/C++软件项目基本的依赖组件,最后形成一个构建C/C++软件项目的模板...,方便后面新项目的重复使用。...如何去构建动静态库和找到这些库? 如何去实现支持多平台的项目构建? 如何去构建一个应用? 如何实现项目的最后install? 如何很友好的去展示构建过程的各种级别信息?...除此之外,C/C++ 程序员长期以来手动管理依赖,即手动查找、安装依赖,再配置构建工具(如 cmake)使用依赖。...4.8 其他 4.8.1 cmake message命令颜色凸显 我们还可以自定义初始化cmake构建的message命令打印颜色,可以方便快速的凸显出错误信息,我们可以创建一个文件cmake/messagecolor.cmake

8K52

如何使用自定义加载器防止代码被反编译破解

今天我们就来聊聊如何通过对代码进行加密实现代码防反编译,至于混淆因为可以直接利用proguard-maven-plugin进行配置实现,相对比较简单,就不在本文论述 02、代码防编译整体套路 1、编写加密工具...而打开加密后的文件,其内容如下 内容宛若天书 思考一:代码都被加密了,那jvm如何识别? 答案:既然有加密,自然可以通过解密来使用。那这个解密得存放在什么地方进行解密?..."list", User.class); method.invoke(clz.newInstance(),new User()); } } 思考二:通过自定义加载器加载过的如何整合进行...因为如果真想进行反编译,其实可以先通过反编译你自定义加载器,然后通过解密方式,去逆推加密算法,从而还原加密。...要杜绝代码被反编译的思路有如下 提高反编译的成本,比如对自定义加载再次加密,编写复杂的加密算法 编写让人没有欲望反编译的代码,比如写一堆垃圾代码 04、demo链接 https://github.com

85920

如何使用自定义加载器防止代码被反编译破解

今天我们就来聊聊如何通过对代码进行加密实现代码防反编译,至于混淆因为可以直接利用proguard-maven-plugin进行配置实现,相对比较简单,就不在本文论述 代码防编译整体套路 1、编写加密工具...而打开加密后的文件,其内容如下 [image.png] 内容宛若天书 思考一:代码都被加密了,那jvm如何识别? 答案:既然有加密,自然可以通过解密来使用。那这个解密得存放在什么地方进行解密?..."list", User.class); method.invoke(clz.newInstance(),new User()); } } 思考二:通过自定义加载器加载过的如何整合进行...因为如果真想进行反编译,其实可以先通过反编译你自定义加载器,然后通过解密方式,去逆推加密算法,从而还原加密。...要杜绝代码被反编译的思路有如下 提高反编译的成本,比如对自定义加载再次加密,编写复杂的加密算法 编写让人没有欲望反编译的代码,比如写一堆垃圾代码 demo链接 https://github.com

1.3K00
领券