c/c++面试总结(2)

2018-06-17 23:54:39来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

4.深拷贝和浅拷贝

  (1)什么时候会用到拷贝函数

    一个对象以值传递的方式传入函数(就是作为入参)

    一个对象以值传递的方式从函数返回(就是作为返回值)

    一个对象需要通过另外一个对象进行初始化

  (2)是否应该自定义拷贝函数

    如果不自己定义拷贝函数,那么编译器会自动生成一个默认的拷贝函数,这个拷贝函数就会完成对象之间的位拷贝

  (3)深拷贝和浅拷贝的理解

    当一个类拥有资源(比如说指针),这个类的对象发生复制过程的时候资源是否重新分配(指针指向一块内存,发生拷贝时是否会在重新申请一块内存),重新分配就是深拷贝,没有就是浅拷贝,

    http://blog.csdn.net/feitianxuxue/article/details/9275979这个大家可以仔细看看加深理解。

5.重写CString(这个也是基本都会考)

class String
{
public:
  String(const char *str = NULL); // 通用构造函数
  String(const String &another);  // 拷贝构造函数
  ~String(); // 析构函数
  String& operater =(const String &rhs); // 赋值函数
private:
  char* m_data; // 用于保存字符串
};

String::String(const char *str = NULL)// 通用构造函数

{

  if(NULL==str)

  {

    m_data = new char[1];

    m_data[0] = '\0';

  }else

  {

    m_data = new char[strlen(str)+1];

    strcpy(m_data,str);

  }

}

String::String(const String &another)  // 拷贝构造函数

{

  m_data = new char[strlen(anoter.m_data)+1];

  strcpy(m_data,another.m_data);

}

String& String::operater =(const String &rhs)// 赋值函数

{

  if(&rhs==this)

  {

    return *this;

  }

  delete [] m_data;

  m_data = NULL;

  m_data = new char[strlen(rhs.m_data)+1];

  strcpy(m_data,rhs.m_data);

  return *this;

}

String:: ~String() // 析构函数

 {

  delete [] m_data;

  m_data = NULL;

}

 6.线程的同步问题

  线程同步的方法:临界区,互斥量,信号量,事件。

  临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 
  互斥量:为协调共同对一个共享资源的单独访问而设计的。 
  信号量:为控制一个具有有限数量用户资源而设计。 
  事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

  (1)临界区和互斥量的区别?

    互斥量跟临界区很相似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:写代码要注意的几点。

下一篇:C++实现日期转换类DateTime