现在位置: 首页 > 指针
unique_ptr <>是c ++ 11提供的智能指针实现之一,用于防止内存泄漏。unique_ptr对象包含一个原始指针,并负责其生命周期。当这个对象被销毁的时候,它的析构函数会删除关联的原始指针。 unique_ptr有重载的- >和*运算符,所以它可以被用于类似于普通的指针。 示例: #include <iostream> #include <memory> struct Task {   int mId;   Task(int id) : mId(id) {     std::cout ...
阅读全文
1、尽量不要使用相同的原始指针来创建多个shared_ptr对象,因为在这种情况下,不同的shared_ptr对象不会知道它们与其他shared_ptr对象共享指针。 这样会造成什么样的问题? 设想两个shared指针由相同的原始指针创建: int *rawPtr = new int(); std::shared_ptr<int> ptr_1(rawPtr); std::shared_ptr<int> ptr_2(rawPtr); 假设ptr_2超出范围,那么它将删除关联的原始指针,这样ptr1就会指向一个悬挂指针。 所以,当...
阅读全文
++,--和[]操作符 相比于原始指针,shared_ptr只提供这些运算符: 1) ->, * 2) 比较运算符 但是,shared_ptr不提供 1) 指针运算比如+,-,++,-- 2) Operator [] 例子: #include <iostream> #include <memory> struct Sample {   void dummyFunction() {     std::cout << "dummyFunction" << std::endl;   } }; int main() {   std::shared_ptr<Sample>...
阅读全文
当一个shared_ptr对象超出作用域时,其析构函数被调用,在析构函数中,将其引用计数减1,如果引用计数的值变为0,则删除关联的原始指针。 要删除析构函数中的内部原始指针,默认情况下,shared_ptr调用delete()函数,即 delete Pointer; 但是,我们在析构函数中并不总是要使用delete函数,还可能有其他的需求。 如果shared_ptr指向一个数组而不是一个简单的指针 std::shared_ptr<int> p3(new int[12]); 在其析构函数中,s...
阅读全文
std::shared_ptr<>是c++11中引入的一种智能指针,它足够聪明,如果指针不在任何地方使用,就会自动删除指针。这可以帮助我们彻底消除内存泄露和悬挂指针的问题。 shared_ptr和共享所有权 它遵循共享所有权的概念,即不同的shared_ptr对象可以与相同的指针相关联,并且在内部使用引用计数机制来实现。 每个shared_ptr对象内部指向两块内存区域 1)指向对象 2)指向用于引用计数的控制数据 共享所有权怎样在引用计数的帮助下...
阅读全文
1:如果函数的参数是一个指针,不要指望用该指针去申请动态内存。Test 函数的语句 GetMemory(str, 200)并没有使 str 获得期望的内存,str 依旧是 NULL,为什么? void GetMemory(char *p, int num)  {       p = (char *)malloc(sizeof(char) * num);  }  void Test(void)  {       char *str = NULL;       GetMemory...
阅读全文
2018-11-16 16:41 工业·编程 ⁄ 共 517字 暂无评论
1,初始化链表头部指针需要用二级指针或者一级指针的引用。 2,销毁链表需要用到二级指针或者一级指针的引用。 3,插入、删除、遍历、清空结点用一级指针即可。 分析: 1,只要是修改头指针则必须传递头指针的地址,否则传递头指针值即可(即头指针本身)。这与普通变量类似,当需要修改普通变量的值,需传递其地址,否则传递普通变量的值即可(即这个变量的拷贝)。使用二级指针,很方便就修改了传入的结点一级指针的值。 如果...
阅读全文
void AddToTail(ListNode **head,int value){     ListNode *newNode = new ListNode();     newNode->data=value;     newNode->next=NULL;     if(*head==NULL)         *head=newNode;     else{         ListNode *tempNode = *head;     &...
阅读全文
2018-11-03 14:45 工业·编程 ⁄ 共 1307字 暂无评论
设计一个函数: void find1(char array[], char search, char *pa) 要求: 这个函数参数中的数组array是以\0值为结束的字符串,要求在字符串array中查找与参数search给出的字符相同的字符。如果找到,通过第三个参数(pa)返回array字符串中首先碰到的字符的地址。如果没有找到,则为pa为NULL。 依题意,实现代码如下。 void find1(char [] array, char search, char *pa) {     for (int i = 0; *(array + i) !=...
阅读全文
2018-11-02 14:41 工业·编程 ⁄ 共 386字 暂无评论
1.在栈区建立数组,指向常量区数据的字符串 char *cPioint[3]={"111111","2222222","3333333"}; 这种用法可以通过二级指针进行传参 void PrintfStr(char **cpoint); 当想访问“111111”时的时候 采用以下两种方法 1)printf("%s",cpoint[0]); 2)printf("%s",*(cpoint+0); 2.手动在堆区分配空间 char **chPoint=(char**)malloc(counts*sizeof(char*)); for(i=0;i<c...
阅读全文