关于指针:c+内存泄漏与智能指针

您好,看到文章的您,如果您是c++初学者,这部分内容须要学习好数据结构中指针和栈的内容,否则可能会有肯定难度,只做理解即可什么是内存透露什么是内存透露,简略来说,就是 1.动静申请堆空间,用完后不偿还2。C++ 语言中没有垃圾回收的机制3.指针无法控制所指堆空间的生命周期例如上面的例子: #include<iostream>#include<string.h>using namespace std;class test{ int i;public: test(int i) { this->i = i; } int value() { return i; } ~test() { }};int main(){ for (int i = 0; i < 5; i++) { test* p = new test(i); cout << p->value() << endl; } return 0;}智能指针的利用从输入后果能够看出,指针被用于了大小比拟和运算,这显然不是咱们冀望的。于是有了智能指针,demo如下: #include <iostream>#include <string>using namespace std;class Test{ int i;public: Test(int i) { cout << "Test(int i)" << endl; this->i = i; } int value() { return i; } ~Test() { cout << "~Test()" << endl; }};class Pointer{ Test* mp;public: Pointer(Test* p = NULL) { mp = p; } Pointer(const Pointer& obj) { mp = obj.mp; const_cast<Pointer&>(obj).mp = NULL; } Pointer& operator = (const Pointer& obj) { if (this != &obj) { delete mp; mp = obj.mp; const_cast<Pointer&>(obj).mp = NULL; } return *this; } Test* operator -> () { return mp; } Test& operator * () { return *mp; } bool isNull() { return (mp == NULL); } ~Pointer() { delete mp; }};int main(){ Pointer p1 = new Test(0); cout << p1->value() << endl; Pointer p2 = p1; cout << p1.isNull() << endl; cout << p2->value() << endl; return 0;}这里次要解决的以下问题 ...

June 4, 2022 · 1 min · jiezi

关于指针:指针作为函数形参使最大最小数对调

输出10个整数,将其中最小的数与第一个数对换,把最大的数与最初一个数对换。写3个函数:①输出10个数;②进行解决;③输入10个数。所有函数的参数均用指针。 include <stdio.h>include <stdlib.h>void In(int *b); int Swap(int x, int y); void Out(int *b); int main() { int *b, x[10];b = x;In(b);int k = 0, K = 9;for (int j = 0;j<10;j++){ if (x[k]>x[j]) { k = j; }}for (int g = 0;g<10;g++){ if (x[K]<x[g]) { K = g; }}if (k != 0) Swap(&x[0], &x[k]);if (K != 9) Swap(&x[9], &x[K]);Out(b);return 0;} void In(int *b) { int i;for (int i = 0;i<10;i++){ scanf("%d", b + i);}} ...

October 17, 2021 · 1 min · jiezi

关于指针:const和一二级指针

一. 一级指针const int *p; //润饰*pint const *p; //润饰*pint *const p; //润饰pconst int *const p; //第一个润饰*p,第二个润饰pA://正确,const int* = int*int a = 10 ;const int* p= &a;B://正确 const int* = const int*const int a=10;const int* p=&a;C://正确 int* = int*int a = 10;int *const p =&a;D://谬误 int* = const int*int a = 10;const int *p=&a;int *q = p;二. 二级指针const int **p; //润饰**pint const **p; //润饰**pint *const *p; //润饰*pint **const p; //润饰pconst int *const*p; //第一个润饰**p,第二个润饰*pA. // 谬误,const int** = int**int a = 10;int *p = &a;const int **q=&pB.// 正确,int *const* = int**int a = 10;int *p=&a;int *const*q = &p;C.// 正确,int **= int**int a = 10;int *p=&a;int **const q = &p;D.// 谬误,int** = int*const*int a = 10;int *const p=&a;int **q = &p;E.// 谬误,int*const* = const int**int a = 10;const int *p=&a;int *const*q = &p;

April 16, 2021 · 1 min · jiezi