C++面试程序员的自我修养C++

C++面试重点再梳理

2018-01-25  本文已影响76人  杭河苇

智能指针

请讲一下智能指针原理,并实现一个简单的智能指针

Counter类实现

class Counter {
    friend class SmartPointPro;
public:
    Counter(){
        ptr = NULL;
        cnt = 0;
    }
    Counter(Object* p){
        ptr = p;
        cnt = 1;
    }
    ~Counter(){
        delete ptr;
    }

private:
    Object* ptr;
    int cnt;
};

SmartPointPro类 未考虑线程安全

class SmartPointPro {
public:
    SmartPointerPro(Object* p){
        ptr_counter = new Counter(p);
    }
    SmartPointerPro(const SmartPointerPro &sp){
        ptr_counter = sp.ptr_counter;
        ++ptr_counter->cnt;
    }
    SmartPointerPro& operator=(const SmartPointerPro &sp){
        ++sp.ptr_counter->cnt;
        --ptr_counter.cnt;
        if(ptr_counter.cnt == 0)
            delete ptr_counter;
        ptr_counter = sp.ptr_counter;
    }
    ~SmartPointerPro(){
        --ptr_counter->cnt;
        if(ptr_counter.cnt == 0)
            delete ptr_counter;
    }
private:
    Counter *ptr_counter;
};

怎么样获取智能指针所包装的指针呢?

STL中的四种智能指针

单例模式

//机智的Meyers写法,优雅而线程安全

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

struct对齐问题

struct Q{
    char c;
    int num1;
    double num2;
};

对齐规则

C++虚函数相关问题

C++中为什么要使用虚函数

请说明C++虚函数的底层实现机制

出现频率: 5星 题目难度: 4星 使用范围: 所有公司

国内的面试题和虚函数有关的题

题目1:为什么需要虚析构函数?

题目2:析构函数一定是虚函数吗?

题目3:访问虚函数和普通函数哪个快?

题目4:内联函数/构造函数/静态成员函数可以是虚函数吗

题目5: 构造函数中可以调用虚函数吗?

C++虚继承相关问题

C++虚继承中的sizeof

先看下面的一段代码

class A {
public:
    int a;
    virtual void myfunA(){}
};

class B : virtual public A{
public:
    virtual void myfunB(){}
};

class C : virtual public A{
public:
    virtual void myfunC(){}
};

class D: public B, public C{
public:
    virtual void myfunD(){}
};

int main (){
    cout << sizeof(A) << endl;
    cout << sizeof(B) << endl;
    cout << sizeof(C) << endl;
    cout << sizeof(D) << endl;
    return 0;
}

C++对象内存模型

上一篇下一篇

猜你喜欢

热点阅读