C++

1.智能指针 内存管理 垃圾回收 指针问题 资源管理(内存就是资源)

可以通过引用计数的机制。。。实现内存回收,不要让内存泄漏。

涉及到内存的泄露的问题:

  1. 当创建一个对象的时候(new)而在对象使用完毕,没有delete就会发生内存泄漏。
  2. 或者有很多指针指向同一块内存,当有一个使用完毕delete了,剩下的指针就会无处可指
  3. 循环引用导致的指针泄漏

很多人会忘记,这时候智能指针就派上用处了,可以帮助程序员自动在析构函数中释放。两个类:

第一个问题想法:同归于尽smartPointer中的指针就是object的指针

  • smartpointer类构造函数析构函数:有一个自己的构造函数把传过来的object指针付给自己,销毁时候delete自己就ok了。
  • 有一个私有成员:object的指针 ptr。
  • 构造完成就相当于object的ptr就是object的p。
  • 所以释放自己的ptr就相当于销毁object的p;

class Object {
public:
int a,b;
};
int main(){
    while(true){
        smartPointer p(new Object());
        Process(p);
    }
}
void Process(Object &p){
    //do something;
}
class smartPointer{
public:
    smartPointer(Object *p){
        ptr=p;
    }
    ~smartPointer(){
        delete ptr;
    }
private: Object  *ptr;
};

第二个问题:

引用计数类~~~~~~~~~~~!!!!!!!!!!记录当前有多少指针指向这个内存。

STL不是基于引用计数的:outo_ptr 同一时刻一个指针只能有一个被一个对象拥有。。。缺点:不能赋值操作,不能参数传递~,

基于计数的:boost库的shared_ptr!!!!!!!!!

可能在:

构造,复制,赋值= 

发生指针指向和指针计数的问题

定义指向counter的指针Smartpointepro

定义指向内存(object)的指针counter

友元类  可以访问Counter类的成员

class Object {
public:
int a,b;
};
int main(){
while(true){
smartPointer p(new Object());
Process(p);
}
}
void Process(Object &p){
//do something;
}
class Conter_Smartpointer{
public:
Conter_Smartpointer(Object *p){//普通的构造  产生新内存
cSp=new Counter(p);
}
Conter_Smartpointer(Conter_Smartpointe &p){//指向同样的内存,复制
cSp=p.cSp;
cSp->cnt++;
}
Conter_Smartpointer& operate=(Conter_Smartpointer &p){//赋值
//right++ left --
cSp->cnt--;被右边的覆盖掉了,指向右边的内存了  原来的引用计数减一
p.cSp->cnt++;
if(cSp->cnt == 0){
delete cSp;
} cSp=p.cSp;
}
~Conter_Smartpointer(){
cSp->cnt--;
if(cSp->cnt == 0){
delete cSp;
}
} private: Counter *cSp;//指向同一个counter
}; class Counter(){
friend class Conter_Smartpointer;//Conter_Smartpointer可以访问counter类的成员(包括私有成员)
pravite:
int cnt;
Object *ptr;
Counter(){
p=NULL;
cnt=0;
}
Counter(Object *p){
ptr = p;
cnt=1;
}

  

第三个问题:

父亲指向儿子,儿子指向父亲,没有一个先释放。。环

解决:boost::weak_ptr

赋值传递:对传入的实参进行拷贝~在函数里处理不会影响原来的对象

引用:相反

资源管理(内存就是资源):

在c++常利用对资源的包装~防止内存泄漏

2.单例模式

设计模式:

一个类只能一个对象~

应用于:系统日志的输出,一个界面只有一个鼠标  鼠标类。。

1.一个类只能一个对象~

2.内存的释放

3.线程安全,多个类产生一个对象

有什么问题:

class Singleton(){
private:
Singleton(){
}
  
static Singleton* instance;
public:
static Singleton* GetInstance(){
if(instance == NULL){
instance = new Singleton();
} } }

  想要产生一个类只能通过GetInstance()

让构造函数是私有的,这样别的类就不能访问这个构造函数

函数传递 和赋值的问题:可能会产生多个对象的问题

无析构:因为无对象:static 定义的类属于整个类,不存在析构。static一旦被构造赋值,就不允许修改。在静态存储区。

对于释放内存的问题,new出来的在堆中产生,必须手动释放

staic在静态存储区,这样操作系统自动释放内存

方法一:如何保证线程安全&&内存不用手动释放

static Singleton instance;当再次调用就直接使用instance:保证只产生一个对象

class Singleton(){
private:
Singleton(){
}
Singleton(Singleton &p){
}
Singleton& operate = (const Singleton &p){
} public:
static Singleton* GetInstance(){ static Singleton instance;
return &instance;
} }

方法二:保证线程安全

double check 加锁

面试笔试总结(一)之 C++基础的更多相关文章

  1. 赠送4本《 PHP 程序员面试笔试宝典》

    < PHP 程序员面试笔试宝典>历时一年,由机械工业出版社出版,在 2018 年 11 月问世.全书共八个章节,涉及 面试笔试经验技巧.PHP 基础知识.PHP 进阶知识,PHP 面向对象 ...

  2. iOS开发——面试笔试精华(二)

    面试笔试精华(二) 警告:一定要把英文题目过一遍,有些公司的题目故意弄成英文的!!! 1.        Difference between shallow copy and deep copy? ...

  3. 新书出版 |《Oracle程序员面试笔试宝典》

    新书出版 |<Oracle程序员面试笔试宝典> <Oracle程序员面试笔试宝典> 丛书[数据库 面试 笔试宝典]已在京东.淘宝和天猫预售,一共 5 本,目前市场上已有4本,丛 ...

  4. (转)C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析

    C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析 http://www.nowcoder.com/discuss/1826?type=2&order=0&pos=23&p ...

  5. .Net工程师面试笔试宝典

    .Net工程师面试笔试宝典 传智播客.Net培训班内部资料 http://net.itcast.cn 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面 ...

  6. 《Java程序猿面试笔试宝典》之 什么是AOP

    AOP(Aspect-Oriented Programming.面向切面编程)是对面向对象开发的一种补充,它同意开发者在不改变原来模型的基础上动态地改动模型从而满足新的需求.比如.在不改变原来业务逻辑 ...

  7. 《PHP面试笔试真题库》——PHP面试的好帮手

    你好,是我琉忆. 一个文艺的PHP开发工程师. 很荣幸能够在这里带来我的第一本新书--<PHP程序员面试笔试真题库>. 一.创作过程 <PHP 程序员面试笔试真题库>是我的第三 ...

  8. 《PHP程序员面试笔试真题解析》——新书上线

    你好,是我--琉忆.很高兴可以跟你分享我的新书. 很高兴,在出版了PHP程序员面试笔试宝典后迎来了我的第二本书出版--<PHP程序员面试笔试真题解析>. 如果你是一个热爱PHP的程序员,刚 ...

  9. 《PHP程序员面试笔试宝典》——如何克服面试中紧张的情绪?

    本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 面试的成功与否,往小的方面讲,直接关系到求职者的工作问题,往大 ...

  10. 《PHP程序员面试笔试宝典》——什么是职场暗语?

    本文摘自<PHP程序员面试笔试宝典> 文末有该书电子版下载. 随着求职大势的变迁发展,以往常规的面试套路因为过于单调.简明,已经被众多"面试达人"们挖掘出了各种&quo ...

随机推荐

  1. python 将日期戳(五位数时间)转换为标准时间

    5位数日期戳 读取 .mat 文件处理里面数据时,发现里面的日期数据全部都是 “5位数” 数字,很不解: 后来查到可以在excel中通过设置单元格调回标准日期格式,如下: 选中日期戳,右键选择 “格式 ...

  2. python学习笔记(二十四)继承与封装

    继承(extends)就是把多个类中相同的成员给提取出来定义到一个独立的类中,然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些类容,这个关系就叫做继承. 实现继承的类称为子类,也叫派生类, ...

  3. nginx映射文件服务器文件夹

    nginx映射文件服务器文件夹 普通用户A安装的nginx,yum源搭建文件服务器,新建普通用户B,其主目录是文件服务器需要访问的目录 普通用户A启动nginx无法访问B用户的文件服务器目录,提示40 ...

  4. LVS-DR 配置测试

    LVS Lvs体系结构 Lvs工作模式(3种) NAT-网络地址转换模式 当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口 ...

  5. .htaccees什么鬼?怎么用?

    .htaccess文件全称Hypertext Access(超文本入口).提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作 ...

  6. js 有小数点数据求和多出小数点问题记录

    >> +192.92 << 492.91999999999996 >> (*+)/ << 492.92 做统计汇总时,页面加和,展示出一堆的小数点. 网 ...

  7. hadoop streaming anaconda python 计算平均值

    原始Liunx 的python版本不带numpy ,安装了anaconda 之后,使用hadoop streaming 时无法调用anaconda python  , 后来发现是参数没设置好... 进 ...

  8. MVC[xml]页面传值

    MVC 各种传值方式 ViewData传值.HomeController.cs Co de: public ActionResult Index(){      ViewData["Titl ...

  9. google GFS

    我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的.可伸缩的分布式文件系统.GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服 ...

  10. SpringMvc接受特殊符号参数被转义

    WEB开发时,在前端通过get / post 方法传递参数的时候  如果实参附带特殊符号,后端接收到的值中特殊符号就会被转义 例如该请求: http://localhost:10001/demo/in ...