禁止对象拷贝(C++)

上一篇文章,说了通过Java的使用方式来使用C++,下面就分析一下如何做。

Java中的对象都是被new出来的,因为Java虚拟机有自动内存回收技术,所以不需要程序员手动delete,在使用C++的时候,我们尽量通过new的方式来创造C++对象,最后通过delete来释放内存。

Java中的=赋值运算符都是把对象的引用传递,而不是C++的拷贝构造函数调用。所以我们要禁止对象拷贝,把=赋值运算符禁止掉。

/*
 * NoCopying.h
 *
 *  Created on: 2013-7-7
 *      Author: freshman
 */

#ifndef NOCOPYING_H_
#define NOCOPYING_H_

class NoCopying
{
private:
    NoCopying& operator = (NoCopying&);
    NoCopying( NoCopying&);
};

#endif /* NOCOPYING_H_ */

只要继承了这个父类,使用对象拷贝的代码就编译的时候就会报错了。以后在使用=运算符的时候,都是对象指针赋值。如下图:

//============================================================================
// Name        : deep.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;

#include "base/NoCopying.h"

int main()
{
    NoCopying *ptr = new NoCopying();
    NoCopying *copyPtr = ptr;
    delete ptr;
    cout<<copyPtr->isDisposed()<<endl;
    return 0;
}

 

posted @ 2013-07-07 10:22  walkabc  阅读(719)  评论(0编辑  收藏  举报