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

C++踩坑记录(一)std:;string的析构

越学C++越觉得自己菜了 之前写服务端程序有一个往消息队列里面推json的过程,然后发现推进去C#端取到的无论如何都是个空指针 简单复现一下现场 string str1 = string("hello1..."); string str2 = string("hello2"); const char* ptr1 = str1.substr(1).data(); // 取字符串从下标1到结尾的部分 const...ptr1 << ptr2 << endl; 这样看起来输出是ello1ello2的输出,在我笔记本上面挺正常的,实际上我集成到服务器上面的时侯炸了,一直取到一组奇怪的字符串 跟踪调试了一早上(虽然写了3年C+...去接收上面产生的子串的时候,问题就会解决了 string str1 = string("string1"); string str2 = string("string2"); string t_str1...= str1.substr(1); string t_str2 = str2.substr(1); const char* ptr1 = t_str1.data(); const char* ptr2

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

简单的 C++ 结构体字段反射

于是,我们用以下几种方法实现: 人工手写 序列化/反序列化 代码 动态反射 静态反射 编译器生成 序列化/反序列化 代码 4....)field_pointer_ 字段的映射方法 value_converter_ 在 operator() 转换时调用 : value_converter_.operator(),传入当前结构体中字段的值和字段的名称...;其中结构体 obj 字段的值通过 obj->*field_pointer_ 得到 最后,针对 结构体 定义一个存储 所有字段 信息(名称、位置、映射方法)的容器StructValueConverter...静态反射 实际上,实现序列化/反序列化所需要的信息(有哪些字段,每个字段的位置、名称、映射方法),在 编译时 (compile-time) 就已经确定了 —— 没必要在 运行时 (runtime) 动态构建...所以,我们可以利用 静态反射 (static reflection) 的方法,把这些信息告诉 编译器,让它帮我们 生成代码。

4.7K41

简单的 C++ 结构体字段反射

于是,我们用以下几种方法实现: 人工手写 序列化/反序列化 代码 动态反射 静态反射 编译器生成 序列化/反序列化 代码 4....)field_pointer_ 字段的映射方法 value_converter_ 在 operator() 转换时调用 : value_converter_.operator(),传入当前结构体中字段的值和字段的名称...;其中结构体 obj 字段的值通过 obj->*field_pointer_ 得到 最后,针对 结构体 定义一个存储 所有字段 信息(名称、位置、映射方法)的容器 StructValueConverter...静态反射 实际上,实现序列化/反序列化所需要的信息(有哪些字段,每个字段的位置、名称、映射方法),在 编译时 (compile-time) 就已经确定了 —— 没必要在 运行时 (runtime) 动态构建...所以,我们可以利用 静态反射 (static reflection) 的方法,把这些信息告诉 编译器,让它帮我们 生成代码。

6.1K31

C++】STL 容器 - string 字符串操作 ⑧ ( string 字符串相关算法 | 字符串转换 - std::transform 函数 | 字符串翻转- std::reverse 函数 )

文章目录 一、string 字符串转换 - std::transform 函数 1、std::transform 函数原型说明 2、代码示例 - string 类 transform 函数转换 二、string...字符串翻转 - std::reverse 函数 1、std::reverse 函数原型说明 2、代码示例 - std::reverse 函数 一、string 字符串转换 - std::transform...函数 1、std::transform 函数原型说明 C++std::transform 函数是 头文件中的一个通用算法 , 用于对指定范围内的元素进行转换 ; std...类 transform 函数转换 代码示例 : #include "iostream" using namespace std; #include "string" #include "algorithm...二、string 字符串翻转 - std::reverse 函数 1、std::reverse 函数原型说明 std::reverse 是 头文件中 的一个 算法函数 , 用于反转给定

62710

C++类大小和静态成员方法

类大小计算 空类的大小为1字节 一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的 字节对齐的问题。...示例 #include using namespace std; /** * 8=4(x)+4 (vptr) */ class A { public: int x;...C::b=10; 使用 int main() { cout<<C::b<<endl; C::b=100; cout<<C::b<<endl; return 0; } 静态方法...静态方法可以被类直接调用,但是同静态变量一样符合public、private、protect特性 静态成员函数不可以调用类的非静态成员。...因为静态成员函数不含this指针。 静态成员函数不可以同时声明为 virtual或后缀const 函数。因为virtual就是用来区分是哪个对象调用了他,与静态方法矛盾。

68950

C++类中静态变量和静态方法使用介绍

刷剑指offer第64题涉及到类内静态成员与方法的知识,有点模糊,找了两篇博客整理一下。...转自:https://www.cnblogs.com/sixue/p/3997324.html 最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与静态成员函数的理解感觉很是模糊...转自:https://www.cnblogs.com/ppgeneve/p/5091794.html 静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。...静态数据成员的使用方法和注意事项如下:   1、静态数据成员在定义或说明时前面加关键字static。//静态变量的定义   2、静态成员初始化与一般数据成员初始化不同。...int A, B, C; static int Sum; }; #include "StaticTest.h" #include using namespace std

1.4K20

C++动态库和静态库_动态库和静态库调用方法

1、前言 从事软件工作也有两年了,C++静态库和动态库也用了不少,但都是依葫芦画瓢,一直没具体去研究一下二者的区别,加载方式等,今天花时间看了几篇博客,重新学习了一下,做出如下笔记。...2、定义 静态库和动态库从字面意思来看,区别就是静态和动态。而这里的静态和动态指的是库的链接阶段。可以看如下的编译过程。 静态库:在链接阶段库将会与目标汇编后的目标文件.o一起打包生成可执行文件。...5.1、静态库: 生成: 在创建win32控制台程序或者win32项目的时候,勾选静态库就可以,进入项目后也可打开工程“属性面板”—》”配置属性”—》”常规”—》配置类型选择静态库。...工程“属性面板”—》”配置属性” —》“C/C++” —》” 常规”,在“附加包含目录”属性值中,键入StaticLib.h 头文件所在目录的路径或浏览至该目录。...6、总结 库分为静态库和动态库。静态库与可执行文件打包,动态库与可执行文件独立。静态库加载需要.lib和.h文件。动态库隐式加载需要.dll、.h、.lib文件,显示加载只需要.dll文件。

2.9K20

c++系列之二 指向成员函数的指针(烧脑)

这就是所谓的“静态绑定”。因为成员函数可以静态绑定(并不是总能静态绑定,待会儿讨论),所以它们的地址是在编译阶段决定的(同样并不是永远如此)。直观地讲,应该有一种方法可以保存成员函数的地址。...而且,真有这么一种方法,那就是——成员函数指针。...C++语法 下面的语法展示了如何声明一个成员函数指针: Return_Type (Class_Name::* pointer_name) (Argument_List);Return_Type: member...int (Foo::*fptr) (string) = &Foo::f; 为了通过函数指针来调用成员函数,我们使用成员指针选择操作符(翻译君表示也不知道该怎么翻译,原文是pointer-to-member...:*)(std::string) ”。

2.9K20

C++反射:深入浅出剖析ponder库实现机制!

导语 | 给静态语言添加动态特性,似乎是C++社区一件大家乐见其成的事情,轮子也非常多,我们不一一列举前辈们造的各种流派的轮子了,主要还是结合我们框架用到的C++反射实现,结合C++的新特性,来系统的拆解目前框架中的反射实现...::string get_meta_attribute_as_string(const std::string_view attrName) const noexcept;}; 具体实现跟前面的图基本是一一对应的...(std::shared_ptr const& p){ return p.get();} 为smart pointer和raw pointer提供获取raw pointer的统一接口。...UserObject的接口大概有几类: 静态构造方法 template static UserObject makeRef(T& object); template...UserObject(const T& object); template UserObject(T* object); 对类型T的构造实现,注意内部调用的是前面介绍的makeCopy()静态方法

1.4K20

C++反射深入浅出 - 1. ponder 反射实现分析总篇

c++反射深入浅出 - ponder 反射实现分析总篇 给静态语言添加动态特性, 似乎是C++社区一件大家乐见其成的事情, 轮子也非常多, 我们不一一列举前辈们造的各种流派的轮子了, 主要还是结合我们框架用到的...::string get_meta_attribute_as_string(const std::string_view attrName) const noexcept; }; 具体实现跟前面的图基本是一一对应的...get_pointer(std::shared_ptr const& p) { return p.get(); } 为smart pointer和raw pointer提供获取raw...UserObject的接口大概有几类: 5.1.1 静态构造方法 template static UserObject makeRef(T& object); template...const T& object); template UserObject(T* object); 对类型T的构造实现, 注意内部调用的是前面介绍的makeCopy()静态方法

1.1K20

C++方法解析:内外定义、参数、访问控制与静态方法详解

C++方法方法,也称为成员函数,是属于类的函数。它们用于操作或查询类数据,并封装在类定义中。类方法可以分为两种类型:类内定义方法: 直接在类定义内部声明和定义方法。...示例:class Person {public: void introduce(); // 方法声明 string name; // 属性};// 在类外部定义方法void Person::introduce...public:方法可以在类外部的任何地方调用。private:方法只能在类的内部调用。protected:方法可以在类的内部或其子类中调用。静态方法静态方法与类本身相关,而不是与特定对象的实例相关。...静态方法不需要创建对象就可以调用,通常用于定义与类相关的实用程序函数。要声明静态方法,请在方法声明前使用 static 关键字。...这些方法不需要创建对象就可以调用,直接使用类名即可。总结类方法C++ 面向对象编程的重要组成部分,用于封装类行为并提供对类数据的操作。

29710
领券