教
教父
Unregistered / Unconfirmed
GUEST, unregistred user!
11月16日
对于一个Delphi程序员来说,C++的面向对象概念并没有太多的难点,倒是泛型编程风格
让我感到头痛。
刚开始接触C++的泛型函数时,看到不需要重载,一个函数就可以适应不同的数据类型,
不禁啧啧称奇,拍案叫绝,但随着学习的不断深入,面对越来越多的令人眼花缭乱的概念时,
脑袋不禁越来越大,不禁想问:C++的这种复杂的机制到底有多大的用处?对于提高效率而言,
这种复杂是否值得?
11月17日
看看下面这个类:
class Matrix {
public:
Matrix(int row,int col):_row(row),_col(col)
{
_pmat=newdo
uble [row*col];
}
~Matrix()
{
delete [] _pmat;
}
private:
int _row,_col;
do
uble * _pmat;
};
再看看如下代码:
{
Matrix mat1(4,4);
{
Matrix mat2=mat1;
///////
}
////////////
}
这段代码很简单,但实际上却存在着很大的问题,_pmat指向的内存区域被释放了两次,这
显然是不正确的。要解决这个问题需要用到“成员逐一初始化”方法,详情参见《Essentail C++》
P108。
但这个问题在Delphi中却不存在,原因在于C++中的对象是在定义时被自动建立的,在语
句区段结束之前被自动释放的,而Delphi则是手动、显式地来建立对象,比如:
Mat1,Mat2:TMatrix;
Mat1:=TMatrix.Create(4,4);
Mat2:=Mat1;//此时实际上并没有创建一个Mat2对象,它和Mat1都是指向同一个对象
//////
Mat1.Free;
//当然,此处你绝对不能再用Mat2.Free了。
对于一个Delphi程序员来说,C++的面向对象概念并没有太多的难点,倒是泛型编程风格
让我感到头痛。
刚开始接触C++的泛型函数时,看到不需要重载,一个函数就可以适应不同的数据类型,
不禁啧啧称奇,拍案叫绝,但随着学习的不断深入,面对越来越多的令人眼花缭乱的概念时,
脑袋不禁越来越大,不禁想问:C++的这种复杂的机制到底有多大的用处?对于提高效率而言,
这种复杂是否值得?
11月17日
看看下面这个类:
class Matrix {
public:
Matrix(int row,int col):_row(row),_col(col)
{
_pmat=newdo
uble [row*col];
}
~Matrix()
{
delete [] _pmat;
}
private:
int _row,_col;
do
uble * _pmat;
};
再看看如下代码:
{
Matrix mat1(4,4);
{
Matrix mat2=mat1;
///////
}
////////////
}
这段代码很简单,但实际上却存在着很大的问题,_pmat指向的内存区域被释放了两次,这
显然是不正确的。要解决这个问题需要用到“成员逐一初始化”方法,详情参见《Essentail C++》
P108。
但这个问题在Delphi中却不存在,原因在于C++中的对象是在定义时被自动建立的,在语
句区段结束之前被自动释放的,而Delphi则是手动、显式地来建立对象,比如:
Mat1,Mat2:TMatrix;
Mat1:=TMatrix.Create(4,4);
Mat2:=Mat1;//此时实际上并没有创建一个Mat2对象,它和Mat1都是指向同一个对象
//////
Mat1.Free;
//当然,此处你绝对不能再用Mat2.Free了。