当前位置: 代码迷 >> C++ >> 关于构造函数解决方案
  详细解决方案

关于构造函数解决方案

热度:3535   发布时间:2013-02-26 00:00:00.0
关于构造函数
今天看了c++的构造函数,发现有许多种构造函数,复制构造还有赋值运算符什么的,我想问一下,在实际开发中有必要把他们都写出来吗,大家是不是都写啊,是不是类中元素包含指针就要写啊,菜鸟问题大神别不鸟我啊
c++

------解决方案--------------------------------------------------------
基本上是,如果类中成员有指针的 
那么要么你把 赋值和拷贝 屏蔽了 要么就实现了

------解决方案--------------------------------------------------------
构造函数常用的是默认构造函数和拷贝构造函数,这两个经常用到,系统提供默认的,常常被重载。
类中不含有指针的也经常被重载,类中如果含有指针则一定要重载,因为编译器不会给指针赋初值。

A{
   A();   //默认构造函数
   A(A &a);    //拷贝构造函数

}
------解决方案--------------------------------------------------------
不一定,你可以禁止你的class被copy或assign

c++98

class A
{
private: //将copy constructor和copy assignment宣告为private,阻止copy
  A(A const&);
  A& operator=(A const&);
};


c++11,意思一样

class A
{
public: 
  A(A const&) = delete;
  A& operator=(A const&) = delete;
};


第三种解法,交给object管理

c++11

class A
{
  private:
    //shared_ptr会负责"shared"资料
    std::shared_ptr<int> data_; 
}

//....
A a, b;
a = b; //a和b的data_指向同一笔资料


第三种解法的变形,利用stl的container

class A
{
  private:
    std::vector<int> data_; //自动处理copy和assignment的问题
}


方法一箩筐,哪一种解法好全看你的需求
除非是设计效能很吃紧的基础库
否则现在都不建议用raw pointer管理资源

方法三和四其实都是RAII的范畴
因为RAII的帮助,我自己写的代码已经好久好久
不曾出现过memory leak等memory相关的问题了
如果我不用和别人合作,就不用为memory leak等
鸟问题烦恼了
------解决方案--------------------------------------------------------
看你的实际需要。有时候需要重新实现拷贝构造函数,比如对象里有new出来的内存的时候。单体模式下要把拷贝构造、默认构造之类的隐藏起来。
  相关解决方案