复制构造和赋值构造的一些尝试

小记:运行环境:vs 2013 c++ win32 console application

#include "stdafx.h"

#include <iostream>

#include <cstdlib>

using namespace std;

class A{

public:

A(){ cout << "A::A()" << endl; }

A(A&){ cout << "A::A(A&)" << endl; }

A& operator=(A& a)
    { cout << "operator=(A&)" << endl;
//    *this = a;        // endless loop
    return *this; }

};

int  _tmain(int argc, _TCHAR* argv[])

{

//    A a, b;        // two default constructor
//    a = b;        // one assignment

//    A a;        // one default constructor
//    A b = a;    // one copy constructor

A c = A();        // one default constructor, no temporary project

system("pause");
    return 0;

}

Author:角落里的一条狗

Email:[email protected]

时间: 2024-10-28 21:03:39

复制构造和赋值构造的一些尝试的相关文章

C++ 复制构造和赋值操作符调用

主要是为了记录说明 : class A; A a; A b = a; //这个是调用复制构造函数呢?还是先构造,再调用赋值操作符? 结果是前者. 测试代码: #include <stdio.h> #include <stdlib.h> class A { public: A() { printf("%s\n", "A constructor"); } A(const A &a) { this->data_ = a.data_;

[Effective C++]构造/析构/赋值运算

条款05:了解C++默默编写了并调用了那些函数 请记住: 编译器可以暗自为class 创建default构造函数,copy构造函数,copy assignment 操作符,以及析构函数 class Empty { public: Empty(){...} //default constructor Empty(const Empty& rhs){...} //copy constructor ~Empty(){...} //destructor Empty& operator=(const

《Effective C++》第2章 构造/析构/赋值运算(2)-读书笔记

章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(2)-读书笔记 <Effective C++>第8章 定制new和delete-读书笔记 条款09:绝不在构造和析构过程中调用virtual函数 你不该在构造和析构函数期间调用virtual函数,因为这样的调用不会带来你预期的结果. (1)在der

Effective C++笔记:构造/析构/赋值运算

条款05:了解C++默默编写并调用哪些函数 默认构造函数.拷贝构造函数.拷贝赋值函数.析构函数构成了一个类的脊梁,只有良好的处理这些函数的定义才能保证类的设计良好性. 当我们没有人为的定义上面的几个函数时,编译器会给我们构造默认的. 当成员变量里有const对象或引用类型时,编译器会不能合成默认的拷贝赋值函数:当一个基类把它的拷贝赋值函数定义为private时,它的派生类也不无生成默认的拷贝赋值函数,因为它无法完成基类成份的赋值. 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 将拷贝构

《Effective C++》构造/析构/赋值 函数:条款10-条款12

条款10:令operator=返回一个reference to *this 赋值操作符运算是由右向左运算的.例如一个连锁赋值 <span style="font-size:14px;">int x, y, z; x=y=z=15;</span> 编译器解释时时这样的: x=(y=(z=15)); 先给z赋值,用赋值后的z再给y赋值,用赋值后的y再给x赋值. 为了实现连锁赋值,操作符必须返回一个reference指向操作符左侧的实参. 其实,如果operator=

《Effective C++》构造/析构/赋值 函数:条款5-条款9

每一个类中都有构造函数.析构函数.赋值操作符.这几个函数是一个类最根本的函数,它控制着创建对象并初始化.对象消亡时的清理以及摆脱旧值赋新值.这样函数如果有问题,那么影响极为严重. 条款5:了解C++默认编写并调用哪些函数 加入编写一个空类,那么经过编译之后,C++默认编写了哪些函数. class Empty{ }; 经过编译器处理后会有默认构造函数.复制构造函数.赋值操作符和析构函数.这些函数都是public且inline. class Empty{ public: Empty(){} Empt

《Effective C++》第2章 构造/析构/赋值运算(1)-读书笔记

章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effective C++>第8章 定制new和delete-读书笔记 条款05:了解C++默默编写并调用哪些函数 当C++处理过一个空类后,编译器就会为其声明(编译器版本的):一个拷贝构造函数.一个拷贝赋值运算符和一个析构函数.如果你没有声明任何构造函数,编译器还会声明一个默认构造函数.所有这些函数都被声明为pub

C++基本函数的调用优化(构造、拷贝构造、赋值)

合理的函数可提升时间和空间的利用率 //Test1.h #include<iostream> using namespace std; struct ST { private: int a; short b; public: ST(int a=0, short b=0):a(a),b(b) { this->a = a; this->b = b; cout<<"Object was Built. "<<this<<endl; }

类的成员函数(构造、析构、拷贝构造、赋值、运算符重载)的实现

以String类为例实现其成员函数 class String { //友元函数重载运算符 friend ostream& operator<<(ostream &out,String& str); friend istream& operator>>(istream& in, String& str); public: //通用构造函数 String(const char* str) { if(!str) //对m_data加NULL