-
create a new object from an existing one
-
for example,when calling a function
//currency as pass-by-value argument void function(Currency p){ cout<<"X = "<
-
对象作为输入,有两种情况:
声明和定义分清楚
初始化和赋值:C当作一样,但是C++ 完全不同
前者是初始化,前面有变量的类型叫做定义,给它一个值叫做初始化
后者是定义好变量,再给它值叫做赋值
该类会进行对象的计数,f 函数对象作为输入,返回对象。
输出:
构造 h 1
析构 x, h, h2 -2
也就是构造 x, h2 时没有通过 HowMany 构造函数做,所以漏了。
如果是上面情况,输出:
构造 h 1
析构 h h2 -1
所以 h2 的构造也没有通过 HowMany 构造函数做
输出:
构造 h h2 2
析构 h h2 2
与上面等价。
和10的区别不过是 10是int, h是个对象
输出:
构造: h h2
析构: h h2
输出:
构造: h x h2
析构:x h h2
所以,如果有一个构造函数,这个构造函数的参数是这个该类型的const 引用,这个构造函数在用该类的对象进行对象初始化时候被调用。该构造函数叫做 拷贝构造。
the copy constructor-
copying is implemented by the copy constructor
-
has the unique signature
T::T(const T&);
- call-by-reference is used for the explicit argument
-
c++ builds a copy constructor for you if you don't provide one!
- copies each member variable
- good for numbers,objects,arrays
- copies each pointer
- data may become shared!
- copies each member variable
如果没有给 拷贝构造函数,C++ 会生成一个。自己的写的可以控制如何拷贝。如果没有特殊需求可以使用编译器提供的。编译器提供的拷贝构造函数会拷贝每个成员变量,做成员变量对成员变量的拷贝。 是成员级别上的拷贝,不是字节级别的拷贝。如果成员全部不是对象,最终结果和字节级别是一样的。如果成员有其他类的对象,那么会调用那个类的拷贝构造。
如果成员有指针,会发生指针的拷贝,两个指针指向一个内存。
如果有引用,两个引用捆绑同一个变量。
这里 传进去的参数会发生拷贝构造,这里就递归了,没有出来条件。C++报错。
而下面这种,传进去过程中不会发生拷贝构造,因为并没有在函数中制造出一个新的对象,只是把外面对象的引用传到了 拷贝构造函数。所以这么做是安全的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)