C + + 멤버 는 포인터 처리 (2) - 인용 기술

전재 출처 를 밝 혀 주 십시오:
http://blog.csdn.net/xcysuccess3/

IOS 를 배 운 후에 C + + 의 복사 구조 함수 와 할당 함수 가 IOS 방식 으로 이 루어 질 수 있다 고 생각 합 니 다.메모리 와 시간 을 절약 하 다.써 봤 어 요.
B.h
//
//  B.h
//  Memory
//
//  Created by xiangchenyu on 13-3-10.
//  Copyright (c) 2013  xiangchenyu. All rights reserved.
//

#ifndef Memory_B_h
#define Memory_B_h

class A
{
private:
    int size;
    int* pStr;
    int* count; //      ,        ,      ,          
    
public:
    A(int size):size(0),pStr(0),count(new int)
    {
        *count = 1;
        this->size = size;
        this->pStr = new int(size);
    }
    ~A()
    {
        Release();
    }
    void setValue(int index,const int& value)
    {
        if(index<this->size)
            pStr[index] = value;
    }
    
    int getValue(int index) const
    {
        if(index<this->size)
            return pStr[index];
        else
            return int();
    }
public:
    //      
    A(const A& a):size(a.size),pStr(a.pStr),count(new int)
    {
        ++(*count);
    }
    //    
    const A& operator=(const A& a)
    {
        if(this == &a)
            return *this;
        //  IOS,     ,       +1,      
        Release();
        
        this->size = a.size;
        this->pStr = a.pStr;
        
        ++(*count);
        
        return *this;
    };
private:
    void Release()
    {
        (*count)--;
        if((*count) == 0)
        {
            if(this->pStr)
            {
                delete []pStr;
                pStr = NULL;
            }
            delete count;
            count = NULL;
        }
       
    }

};

#endif

함수 가 호출 된 곳:
 [super viewDidLoad];
    A a(10);
    a.setValue(0, 555);
    A a1 = a;
    
    NSLog(@"a1-->%d",a1.getValue(0));

결 과 는 여전히 555.
이전 글 을 보 셔 도 됩 니 다. 여 기 는 여러 번 의 할당 복사 로 인 한 메모리 문 제 를 피 할 수 있 습 니 다.이 방식 을 추천 합 니 다.

좋은 웹페이지 즐겨찾기