关于构造函数

kaiseer8828 2013-02-02 08:29:55
今天看了c++的构造函数,发现有许多种构造函数,复制构造还有赋值运算符什么的,我想问一下,在实际开发中有必要把他们都写出来吗,大家是不是都写啊,是不是类中元素包含指针就要写啊,菜鸟问题大神别不鸟我啊
...全文
214 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaiseer8828 2013-02-02
  • 打赏
  • 举报
回复
谢谢楼上各位大神 其实我还有两个问题发在硬件区了 硬件区好冷清 都没人鸟我
chinaliu123 2013-02-02
  • 打赏
  • 举报
回复
看你的实际需要。有时候需要重新实现拷贝构造函数,比如对象里有new出来的内存的时候。单体模式下要把拷贝构造、默认构造之类的隐藏起来。
stereoMatching 2013-02-02
  • 打赏
  • 举报
回复
不一定,你可以禁止你的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等 鸟问题烦恼了
xxyifan 2013-02-02
  • 打赏
  • 举报
回复
看你实际的应用吧,如果有指针时需要注意,区分一下member set和bit set
caoh110 2013-02-02
  • 打赏
  • 举报
回复
构造函数常用的是默认构造函数和拷贝构造函数,这两个经常用到,系统提供默认的,常常被重载。 类中不含有指针的也经常被重载,类中如果含有指针则一定要重载,因为编译器不会给指针赋初值。 A{ A(); //默认构造函数 A(A &a); //拷贝构造函数 }
苹果皮 2013-02-02
  • 打赏
  • 举报
回复
基本上是,如果类中成员有指针的 那么要么你把 赋值和拷贝 屏蔽了 要么就实现了

64,635

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧