当前位置: 首页 > news >正文

阿里巴巴跟建设网站的区别wordpress同步

阿里巴巴跟建设网站的区别,wordpress同步,一个空间放2个网站,网站编辑的岗位职责背景#xff1a;项目中需要某个类不能被拷贝构造和赋值构造#xff0c;下面举例说明该场景#xff1a; 什么时候需要不可拷贝类 考虑一种情况#xff0c;我们要实现一个含有动态数组成员的类#xff0c;其中动态数组成员在构造函数中 new 出来#xff0c;在析构函数中 …背景项目中需要某个类不能被拷贝构造和赋值构造下面举例说明该场景 什么时候需要不可拷贝类 考虑一种情况我们要实现一个含有动态数组成员的类其中动态数组成员在构造函数中 new 出来在析构函数中 delete 掉。比如说这样一个矩阵类 templatetypename _T class Matrix { public:int w;int h;_T* data;// 构造函数Matrix(int _w, int _h): w(_w), h(_h){data new _T[w*h];}// 析构函数~Matrix() {delete [] data;} }上面的测试 1 中我们先构造了 m1 和 m2 两个 Matrix 实例这意味着他们各自开辟了一块动态内存来存储矩阵数据。然后我们使用 将 m2 拷贝给 m1这时候 m1 的每个成员whdata都被各自使用 运算符拷贝为和 m2 相同的值。m1.data 是个指针所以就和 m2.data 指向了同一块的内存。于是这里就会出现两个问题其一 发生拷贝前 m1.data 指向的动态内存区在拷贝后不再拥有指向它的有效指针无法被释放于是发生了内存泄露其二在 copy() 结束后m1 和 m2 被销毁各自调用析构函数由于他们的 data 指向同一块内存于是发生了双重释放。 测试 2 中也有类似问题。当调用 copy(Matrix_T cpy) 时形参 cpy 拷贝自实参而 cpy 会在函数结束时销毁cpy.data 指向的内存被释放所以实参的矩阵数据也被销毁了——这显然是我们不愿意看见的。同样的在返回时ret 随着函数结束而销毁返回值因为拷贝自 ret所以其矩阵数据也被销毁了。 因此对于像 Matrix 这样的类我们不希望这种拷贝发生。一个解决办法是重载拷贝函数每次拷贝就开辟新的动态内存 Matrix_T operator (const Matrix_T cpy) {w cpy.w;h cpy.h;delete [] data;data new _T[w*h];memcpy(data, cpy.data, sizeof(_T)*w*h);return *this; }Matrix(const Matrix_T cpy):w(cpy.w), h(cpy.h) {data new _T[w*h];memcpy(data, cpy.data, sizeof(_T)*w*h); }这样做也有不好的地方。频繁开辟动态内存当数据量很大时比如图像处理对程序性能是有影响的。在接口设计的角度考虑应该把这种拷贝操作以较明显的形式提供给用户比如禁用等号拷贝以直接的函数代替 操作 void copyFrom(const Matrix_T cpy) {w cpy.w;h cpy.h;delete [] data;data new _T[w*h];memcpy(data, cpy.data, sizeof(_T)*w*h); 再禁用构造拷贝只允许用户以引用传递的办法在自定义函数中使用 Matrix 类。 那么如何禁止拷贝操作呢 实现不可拷贝类 使用 boost::noncopyable Boost 作为 C 万金油工具箱在 boost/noncopyable.hpp 下提供了不可拷贝类的实现使用起来也非常简单让自己的类继承自 boost::noncopyable 即可 class Matrix : boost::noncopyable {// 类实现 }声明拷贝函数为私有 如果不想用第三方库自己实现呢不妨先看一下 Boost 是怎么做的 private: // emphasize the following members are privatenoncopyable( const noncopyable );noncopyable operator( const noncopyable );嗯****直接把拷贝函数声明为私有****的不就等于禁用了么so smart于是 templatetypename _T class Matrix { private:Matrix(const Matrix_T);Matrix_T operator (const Matrix_T); }C 11 下使用 delete 关键字 C 11 中为不可拷贝类提供了更简单的实现方法使用 delete 关键字即可 template class Matrix { public: Matrix(const Matrix_T) *delete*; Matrix_T operator (const Matrix_T) *delete*; } 关于类似 Matrix 矩阵类的实现更高级的做法是像智能指针一样封装其内部数据用内部计数器来确定动态分配的成员是否要释放掉不过这是另外一个问题了。 boost::noncopyable比较简单, 主要用于单例的情况. **通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦**.​ 有noncopyable类, 只要让单例类直接继承noncopyable. ​ class noncopyable的基本思想是把构造函数和析构函数设置protected权限这样子类可以调用但是外面的类不能调用那么当子类需要定义构造函数的时候不至于通不过编译。但是最关键的是****noncopyable把复制构造函数和复制赋值函数做成了private****这就意味着除非子类定义自己的copy构造和赋值函数否则在子类没有定义的情况下外面的调用者是不能够通过赋值和copy构造等手段来产生一个新的子类对象的。 private: // emphasize the following members are private noncopyable( const noncopyable ); const noncopyable operator( const noncopyable ); #ifndef BOOST_NONCOPYABLE_HPP_INCLUDED #define BOOST_NONCOPYABLE_HPP_INCLUDEDnamespace boost {// Private copy constructor and copy assignment ensure classes derived from // class noncopyable cannot be copied.// Contributed by Dave Abrahamsnamespace noncopyable_ // protection from unintended ADL {class noncopyable{protected:noncopyable() {}~noncopyable() {}private: // emphasize the following members are privatenoncopyable( const noncopyable );const noncopyable operator( const noncopyable );}; }typedef noncopyable_::noncopyable noncopyable;} // namespace boost#endif // BOOST_NONCOPYABLE_HPP_INCLUDED#include tfun.hclass myclass: public boost::noncopyable { public:myclass(){};myclass(int i){}; };int main() {myclass cl1();myclass cl2(1);// myclass cl3(cl1); // error// myclass cl4(cl2); // errorreturn 0; }
http://www.huolong8.cn/news/259801/

相关文章:

  • 网站改版后的推广办法wordpress播放器安装不了
  • 中国传统色彩网站建设方案黑马程序员python
  • 无忧网站源码c# asp.net网站开发书
  • ai做图标教程网站html 修改 wordpress
  • 楚雄微网站建设常州网站建设套餐
  • 安徽网站建设 网新系统优化软件推荐
  • 移动网站网上营业厅做网站的外包公司可以进吗
  • 没有网站怎么做CPC全网热搜关键词排行榜
  • 网站怎么换空间商对单位网站建设的意见
  • 网站接入支付宝在线交易怎么做珠海正规网站制作系统
  • 杭州网站建设 企业深圳市住房与建设局网站
  • 什么是网站建设策划百度免费域名
  • 汕尾北京网站建设搜狐一开始把网站当做什么来做
  • 石家庄网站设计建设公司网站建设具体实施方案
  • 网页设计与网站建设 公开课漯河网站建设lhwzzz
  • 自己做的网站可以卖时间轴网站模板
  • 全英文外贸网站建设石油 技术支持 东莞网站建设
  • 上传的网站打不开 index.asp怎么在服务器上面建设网站
  • 网站设计 网站推广 网站优化做外国网站
  • 企业网站设计欣赏阿里巴巴国际站买家入口
  • 青岛模版网站建设济南网站建设选聚搜网络认可
  • 戴尔网站建设目标前端网站怎么做
  • 在线阅读网站开发教程网站根验证文件在哪
  • 长沙做网站推广莞城发布最新通告
  • 网站一般用什么语言写包装东莞网站建设0769
  • 建设部证书公布网站济南天桥区网站建设公司
  • 杭州模板建站哪家好企业网站开发报价单
  • 无锡企业推广网站五百丁简历官网
  • 怎么做考试资料分享网站电商网站建设与课程设计
  • 手机网站建立sem扫描电镜是测什么的