在定义一个新类型的时候,一般要显示或者隐式的制定复制,赋值和撤销该类型的对象会发生什么复制够着函数,赋值操作函数和析构函数1.复制构造函数C++支持两种初始化方式,直接初始化,复制初始化。如果想防止复制,就可以将其复制构造函数声明为private大多数类应该定义复制构造函数和默认构造函数2.赋值操作...
                            
                            
                                分类:
编程语言   时间:
2014-05-26 15:16:43   
                                阅读次数:
352
                             
                    
                        
                            
                            
                                和默认构造函数一样,当用户未显式定义复制构造函数时,编译器只有在某些条件下才会合成一个nontrivial的复制构造函数。所以,如果一个类未定义复制构造函数,编译器就自动为它产生出一个,这句话是错误的。下面主要讨论在哪些情况下,编译器才会自动合成一个复制构造函数。
如果有一个如下所示的类:
class Foo {
public:
    int x, y;
};
那么编译器不...
                            
                            
                                分类:
其他好文   时间:
2014-05-22 08:17:35   
                                阅读次数:
189
                             
                    
                        
                            
                            
                                构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即:A(void) 
//默认无参数构造函数A(const A &a) ...
                            
                            
                                分类:
其他好文   时间:
2014-05-18 00:49:10   
                                阅读次数:
246
                             
                    
                        
                            
                            
                                #include #include using namespace std;class 
Obj{public: Obj(void){cout obj(10); vector obj2(10,0); return 
0;}结果如下://执行了构造函数2次,20次复制构造函数,析构函数22次//我想提出的...
                            
                            
                                分类:
编程语言   时间:
2014-05-17 23:51:52   
                                阅读次数:
566
                             
                    
                        
                            
                            
                                主要是为了记录说明 :
class A;
A a;
A b = a; //这个是调用复制构造函数呢?还是先构造,再调用赋值操作符? 结果是前者。
测试代码: 
#include 
#include 
class A {
  public:
    A() {
      printf("%s\n", "A constructor");
    }
    A(cons...
                            
                            
                                分类:
编程语言   时间:
2014-05-15 11:17:40   
                                阅读次数:
365
                             
                    
                        
                            
                            
                                面向对象编程--构造函数和复制控制[续]三、复制控制和继承	合成操作对对象的基类部分连同派生类部分的成员一起进行复制、赋值或撤销,使用基类的复制构造函数、赋值操作符或析构函数对基类部分进行复制、赋值或撤销。	类是否需要定义复制控制成员完全取决于类自身的直接成员。基类可以定义自己的复制控制而派生类使用合成版本,反之,基类使用合成版本,而派生类使用自己定义的复制控制也可以。	只包含类类型或内置类型的数...
                            
                            
                                分类:
编程语言   时间:
2014-05-13 15:30:40   
                                阅读次数:
388
                             
                    
                        
                            
                            
                                stringstream本身的复制构造函数是私有的,无法直接用,于是带来了一些复杂的问题网上,流传着几种办法,如streamA.str(streamB.str()),但这种办法,复制的仅仅是初始化时的string会在以下这种情况下暴露出问题: 
stringstream s1("123aaa")...
                            
                            
                                分类:
其他好文   时间:
2014-05-12 00:53:33   
                                阅读次数:
266
                             
                    
                        
                            
                            
                                复制控制--复制构造函数、赋值操作符引言:   当定义一个新类型时,需要显式或隐式地指定复制、赋值和撤销该类型的对象时会发生什么– 复制构造函数、赋值操作符和析构函数的作用!     复制构造函数:具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式的使用复制构造函数;当将该类型的对象传递给函数或者从函数返回该类型的对象时,将隐...
                            
                            
                                分类:
编程语言   时间:
2014-05-02 07:48:27   
                                阅读次数:
385
                             
                    
                        
                            
                            
                                在C++中,explicit关键字主要用于防止隐式转换,用于修饰构造函数、复制构造函数。例如有一个类:class A { public: A( int 
count ) : m_data( count ){} private: int m_data; };int main() { ...
                            
                            
                                分类:
其他好文   时间:
2014-05-01 03:03:36   
                                阅读次数:
311
                             
                    
                        
                            
                            
                                构造函数不能是虚函数。但有时候确实需要能传递一个指向基类对象的指针,并且有已创建的派生类对象的拷贝。通常在类内部创建一个Clone()方法,并设置为虚函数。//Listing 
12.11 Virtual copy constructor#include using namespace std;cla...
                            
                            
                                分类:
编程语言   时间:
2014-04-29 17:26:52   
                                阅读次数:
522