C++ 指针 技术教程文章

c++ shared_ptr储存this指针多次析构问题之enable_shared_from_this解决方案【代码】

#include <iostream> #include <memory> #include <cassert> /*//this //调用了两次析构函数,ParentPtr p(this);//智能指针出了作用域后就delete this ,析构了//所以错了,为了解决这个问题,就需要自身的类继承于 std::enable_shared_from_this<Type>//将ParentPtr p(this) 换成, shared_from_this();*/ class Parent; typedef std::shared_ptr<Parent> ParentPtr; typedef std::weak_ptr<Parent> WeakParentPtr;class Child : pub...

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器 std::ref(变量)#include<iostream>template<class T> void com(T arg)//模板函数,引用无效,引用包装器 {std::cout <<"com ="<< &arg << "\n";arg++; }void main() {int count = 10;int & rcount = count;com(count);std::cout << count << std::endl;//std::ref(变量) ,函数模板,引用包装器//com(std::ref(count));com(rcount);std::cout << "main=" << &rcount << "\n";std::cout << count << std::endl;std::cin...

小猪猪逆袭成博士之C++基础篇(四)数组、指针、vector、迭代器【图】

小猪猪逆袭成博士之C++基础篇(四)关键词:数组,Vector。 一、数组与指针数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据。例如:int a[10],意思就是从a开始有10个连续的int大小的空间。我们还是从初始化说起。我们以数据类型int为例,当然也可由有很多的数据类型,可以是像int,double这种,也可以是自定义的类,一般的初始化方法有:int a[10];int a[10]={0};int a[3]={0,1,2};在前面的文章...

c++ 智能指针及 循环引用问题

c++智能指针介绍由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete,比如流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见,并造成内存泄露。如此c++引入智能指针 ,智能指针即是C++ RAII的一种应用,可用于动态资源管理,资源即对象的管理策略。智能指针在 <memory> 标头文件的 std 命名空间中定义。 它们对 RAII 或获取资源即初始化编程惯用法至关重要。RAI...

C++ 之 指针详解篇(一)【代码】

C++的指针太重要了,我们有必要去掌握它。所以必须认真的对待指针。先来讲解什么是指针。(重点掌握)  指针是存储内存地址的变量,内存又是什么?内存是干啥用的?简单的说,就是存储一些二进制数据,它是按一定的顺序存储的线性单元结构。那一个数据又是如何存储在内存的呢?这些问题都是汇编的基础知识,如果你学过汇编理解这真的不是难事。闲话越扯越远了,通常数据的存储在内存地址中,不同的计算机它的地址也会不同。假设我们...

C++学习杂谈1(extern、cosnt引用&指针)

extern的用法:.cpp 1#include <iostream>using namespace std;extern int i;int main(int argc, char** argv) { cout << i << endl; return 0;}.cpp 2#include <iostream>int i = 100;注意:在测试的时候.cpp 2没有加头文件#include<iostream> 导致编译报错。另外的:const限定符除了将其修饰的对象变为常量对象外,还有其他的特点:1,因为const对象一旦创建后其值就不能改变,所以const对象必须初始化。2,默认状态下,const对象...

C++字符串指针与字符数组的区别【代码】

今天发现这样一个问题#include <iostream> usingnamespace std; int main() { char ch1[10];strcpy_s(ch1,"123456");//编译通过char* p = newchar[10];strcpy_s(p,"123456");//报错:不接受2个参数 }改成如下所示就没有问题:strcpy_s(p,10,"123456");//编译通过为什么会这样呢?先看下字符数组与字符串指针的区别:1.由双引号括起来的字符串常量属于静态存储类型,它被存储在内存的静态存储区内,所以无论字符串常量出现在程序的什...

C++ 指针

首地址:一段连续的存储地址中,第一个单元的地址是首地址。指针类型的加减,是以指针所指向的类型为单位,进行偏移。 一维数组与指针:定义一个一维数组,数组名是整个数组首地址。int a[5];其中a和&a[0]是相同的,都是整个数组的首地址,类型是int*但是&a的类型是int(*)[5],,指向数组的整个地址。如何利用指针访问数组的值?定义一个数组 int a={1,2,3,4,5};定义一个指针 int *p =a;//a代表了这个数组的首地址,p指向a[0]那么*p...

【校招面试 之 C++】第13题 C++ 指针和引用的区别

1、指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存...

C++ 指针与数组【代码】

指针与数组 在C++中,指针与数组有着非常紧密的联系。 数组有一个特性:在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向数组首元素的指针:String *p = nums; // 等价于 p = &nums[0]; 在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针。 以上的描述还是有点难以让人理解,那么我们接下来更仔细地说明一下指针与数组之间的联系 首先,是它们的定义 数组与指针的定义 数组:数组是存...

C++智能指针简单剖析【代码】

导读智能指针是行为类似于指针的类对象,所有的智能指针都会重载 -> 和 * 操作符。智能指针还有许多其他功能,比较有用的是自动销毁。这主要是利用栈对象的有限作用域以及临时对象(有限作用域实现)析构函数释放内存。当然,智能指针还不止这些,还包括复制时可以修改源对象等。智能指针根据需求不同,设计也不同(写时复制,赋值即释放对象拥有权限、引用计数等,控制权转移等)。智能指针是存储指向动态分配(堆)对象指针的类,...

C++智能指针 unique_ptr【代码】

C++智能指针 unique_ptr unique_ptr 独占所指向的对象, 同一时刻只能有一个 unique_ptr 指向给定对象(通过禁止拷贝语义, 只有移动语义来实现), 定义于 memory (非memory.h)中, 命名空间为 std. 标准库早期版本中定义了 auto_ptr, 它具有 unique_ptr 的部分特征, 但不是全部, 例如, 不能在容器中保存 auto_ptr, 也不能从函数中返回 auto_ptr. 基于这些原因, 应该尽量使用 unique_ptr, 而不是 auto_ptr, 使用 unique_ptr 替换...

C++指针

一.指针定义  C++规定,存放地址的变量称为指针变量,变量的地址称为变量的指针。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。指针变量也是变量,只是指针变量存储的是变量的指针。指针变量存放的是变量的指针,在32位系统中指针的宽度为32位(即4字节),所以在32位系统中,指针变量的大小是4字节,无论是什么类型的指针变量。  一个指针变量有两个属性,一个是它的...

C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间【代码】【图】

先来看下面的例子:#include <stdlib.h> #include <string.h> #include <stdio.h>#pragma warning(disable:4996)typedef struct _Student {char name[64];int age;}Student;typedef struct _Teacher {char name[64];int age;char *p1;char **p2;Student s1;Student *ps1;}Teacher;int main() {Teacher t1;t1.age = 30;t1.s1.age = 20;// 操作结构体中的结构体指针t1.ps1->age = 100;system("pause");return0; }编译,没有问题,但是...

C++入门经典-例6.11-使用指针变量遍历二维数组【代码】【图】

1:代码如下:// 6.11.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <iomanip> usingnamespace std; void main() {int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int *p;p=a[0];for(int i=0;i<sizeof(a)/sizeof(int);i++){cout << "address:";cout << a[i] ;//在二维数组中a[i]代表每个元素的地址cout << " is " ;cout << *p++ << endl;} } /*sizeof:其作用就是返回一个对象或者类型所占的...

71. C++ 分别用指针数组和二维数组生成二维空间,存储数据并释放。 练习new/delete, new[]/delete[]【代码】【图】

分别用指针数组和二维数组生成二维空间,存储数据并释放。比如,数据如下: //使用了下fgetc() 1 #include <iostream>2 #include <stdio.h>3usingnamespace std;4 5 6int main()7{8#if 0 //生成二维数组存储 9 FILE* fp = fopen("G:\\qtcode\\temp.txt","r"); 1011//char buf[3][10] ={0};12char (*buf)[10] = newchar[3][10]; 1314int i,j,ch; 15for(i = 0;i<3;i++) 16 { 17for(j = 0;j<8;j++) 18 { 19 ...

c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)【代码】

一个简单的point坐标类 class Point {public: Point():xval(0),yval(0){} Point(int x,int y):xval(x),yval(y){} int x()const { return xval; } int y()const { return yval; } Point& x(int xv) { xval = xv; return *this; } Point& y(int yv) { yval = yv; return *this; }private: int xval, yval;};将handle 绑定到其上 进行一层封装通过handle控制那些操作可以公开 那些操作私有 阻止用户对point的地址的操作更重要的是提供...

C++11封装智能指针

引自:https://blog.csdn.net/man_sion/article/details/77196766//模板类作为友元时要先有声明template <typename T> class SmartPtr;//辅助类template <typename T> class RefPtr{private: //该类成员访问权限全部为private,因为不想让用户直接使用该类 friend class SmartPtr<T>; //定义智能指针类为友元,因为智能指针类需要直接操纵辅助类 //构造函数的参数为基础对象的指针 RefPtr(T *ptr):p(ptr), count(...

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

【送给在路上的程序员】对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步。对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现。每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我。cppIDE使用mfc和codeblocks中的mingw编译器。执行system命令中...

C++学习 - 数组指针/指针数组【代码】

虽然我一直知道它们两个的区别,但是分不清名字应该是叫哪个。 这里区别一下。指针数组( array of pointers )顾名思义:这是个数组,数组里面的元素都是指针。int*arr[10];这个等同于 int *(a[4])因为*的优先级比较低,所以没有括号的时候,是arr和[10]先结合,变成一个数组,然后这个数组的元素是整型指针。初始化这个初始化要按照数组的方式来。for ( int i = 0; i < 10; i++){a[i] = (int *)malloc( 5 * sizeof(int) ); }这样就...