【[c++] 双重指针】教程文章相关的互联网学习教程文章

C++智能指针简单实现【代码】

share_ptr 简单实现:#include <iostream>using namespace std;template<class T> class SmartPtr { public:SmartPtr(T* ori_ptr);~SmartPtr();SmartPtr(SmartPtr<T>& ori_ptr);SmartPtr<T>& operator=(const SmartPtr<T>& ori_ptr);private:T* ptr;int* count; };template<class T> SmartPtr<T>::SmartPtr(T* ori_ptr) {count = new int(1);ptr = ori_ptr; }template<class T> SmartPtr<T>::~SmartPtr() {if (--(*count) <= 0){de...

C++引用和指针的区别【代码】

我们可以把引用理解成变量的别名。定义一个引用的时候,程序把该引用和它的初始值绑定在一起,而不是拷贝它。计算机必须在声明r的同时就要对它初始化,并且,r一经声明,就不可以再和其它对象绑定在一起了。引用的一个优点是它一定不为空,因此相对于指针,它不用检查它所指对象是否为空,这增加了效率(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只...

c++ 引用 指针。【图】

一、什么是引用(reference) ?已经存在的对象的另外一个名字。引用有什么不同的?1.引用在定义时,以&开头。2.引用不是对象,只能绑定在对象上。所以必须在初始化的时候,指定引用绑定的对象。而且引用绑定是不可以改变的。int val = 0;int &refVal = val; // 不允许 int &refVal; 这样初始化3.就像使用变量名一样,对引用赋值,实际上是给该引用绑定的对象赋值,获取引用的值,也同样是获取与该引用绑定的对象的值。int &refVal...

c/c++野指针【代码】

野指针概念: 如果一个指针指向的内存没有访问权限,或者指向一块已经废弃掉的内存,那么就无法对该指针进行操作,这就是野指针。 1.指向没有访问权限的内存: #include <stdio.h> int main() {char *s;gets(s); //从流中读取字符串,碰到文件末尾或者\n时结束。puts(s); //字符串标准输出stdout,直到空字符,但是输出里面不包含空字符,包含\nreturn 0; } 这段程序在GCC下运行会报Segment Fault错误,因为s是局部指针变量,...

C++ 指针 const 数组 引用

指针和const 禁止改写指针(常量指针或常指针) int x=0; int * const pInt = &x; 存放地址的变量pInt不可变,但pInt可指向其他变量,x的值可变。 禁止改写间接引用 int x=5; const int *pInt=&x; pInt中存放的地址可以变,但x的值不可变。 既禁止改写指针,又禁止改写间接引用 int x=5; const int * const pInt = &x; 指针和数组 在C++中数组和指针的关系十分密切,两者的内部处理方式几乎相同。访问数组中的元素有下标和指针两种形...

C++引用与指针的关系【代码】【图】

C++引用与指针的关系引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。 不存在空引用。引用必须连接到一块合法的内存。 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。 引用必须在创建时被初始化。指针可以在任何时间被初始化。牛客网上的参考回答: C++使用引用 int i = 10; int& m = i; ...

C/C++ C++11智能指针

在使用基本指针类型时,因为要手动释放指针指向的内存,常常容易造成内存泄漏,特别是异常分支很多的情况下。而智能指针类型就是将基本指针类型封装成模板类,以便更好地管理内存。 智能指针都包含一个explicit构造函数,因此基本指针类型不能隐式转换成智能指针,需要显式调用。shared_ptr<double> sp_d; double *p_d = new double; sp_d = p_d; // 错误,隐式转换。 sp_d = shared_ptr<double>(p_d); // 正确,显式转换。 share...

c++指针和数组【代码】【图】

1.相关知识点1.使用取地址符获取指向某个对象的指针,指针指向的是地址。2.数组的一特性,大多数情况,使用数组名字的地方,编译器自动地将其替换为一个指向数组首地址的指针。3.指针也是迭代器,目前对迭代器的内容和概念我还不清楚 2.相关代码1 #include<iostream>2 using namespace std;3 int main()4 {5 int a[] = {1,2,3,4,5};6 //int *p = a ; //数组名称表示数组首地址 7 int *p = &a[0]; //指针指向的一定是...

c++函数模板 引用交换和指针交换类模板【代码】

函数模板 模板技术,类型参数化,编写代码可以忽略类型 为了让编译器区分是普通函数还是模板函数 // 模板.cpp: 定义控制台应用程序的入口点。 //#include "stdafx.h" #include<iostream> using namespace std; template<typename T>//template<class t> //告诉编译器,下边是模板函数 void Myswap(T*a, T*b) {T temp= *a;*a = *b;*b = temp;//cout << "in a=" << *a << " b=" << *b << endl; } template<typename T> void Myswap1...

C++ 手动实现简单的智能指针类

何为智能指针,即不需要用户再自动手动New和Delete掉,由内部类进行new和delete,这样可以防止用户忘记释放掉指针而造成的内存泄漏。 这里简单的实现unique_ptr智能指针的方式。 头文件 // 自制智能指针类头文件 template class SmartPointer{ public: SmartPointer(T* ptr_); ~SmartPointer(); T* operator->() const; //重载->符号 T& operator*() const; //重载符号 SmartPointer& operator=(SmartPointer&ptr_); //重写=符号::...

C++ 类成员函数的函数指针

C++ 类成员函数的函数指针 调用类中非静态成员函数的时候,使用的是类名::函数名;而不是实例名::函数名。 class A { public:   static void StaticMethod(){cout<<"static"<<endl;}     //static member 静态函数   void nonStaticMethod() {cout<<"nonstatic"<<endl;} //nonstatic member 普通成员函数   virtual void virtualMethod(){cout<<"virtual"<<endl;};   //virt...

c++数组与指针知识集锦【代码】

1、 // by 鸟哥 qq1833183060 数组与指针 #include <iostream> using std::cout; int main() { int a[10]{1,2,3,4,5,6,7,8,9,10};int j=6;cout<<a[j]<<" "<<*(&a[0]+j)<<" "<<*(a+j)<<" "<<*(j+a)<<" "<<j[a]<<std::endl; } //输出为 7 7 7 7 7运行结果:7 7 7 7 7点赞 收藏分享文章举报鸟哥01发布了20 篇原创文章 · 获赞 4 · 访问量 1424私信 关注

c++使用对象指针【代码】

使用对象指针 C语言中经典的指针在 C++ 中仍然广泛使用,尤其是指向对象的指针,没有它就不能实现某些功能。 Student stu; Student *pStu = &stu; 上面代码中创建的对象 stu 在栈上分配内存,需要使用&获取它的地址,例如: Student stu;Student *pStu = &stu; pStu 是一个指针,它指向 Student 类型的数据,也就是通过 Student 创建出来的对象。 当然,你也可以在堆上创建对象,这个时候就需要使用前面讲到的new关键字(C++ new和...

【C++】智能指针详解之美【图】

参考资料:《C++ Primer中文版 第五版》 我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。程序用堆来存储动态分配的对象即那些在程序运行时分配的对象,当动态对象不再使用时,我们的代码必须显式的销毁它们。 在C++中,动态内存的管理是用一对运算符完成的:new和delete,new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针,delete:指向一个动态独享的指针,销毁对象,并...

C++如何使指针指向泛型的对象【代码】

引言 这是一次在代码中遇到的一个小问题,在网上没有找到解答,遂在解决后分享出来,帮助有同样问题的朋友 直入主题 我们来看一段简单的代码来引入我们的问题template<typename Type>struct wrapper_type{Type fun;...};首先这是一个简单泛型对象的声明,假如现在有一个需求,就是我们需要一个智能指针指向一个泛型的对象呢?你也许会说,像往常一样不就好了,你也许是这个意思:template<typename Type>struct wrapper_type{Type fun;...};...