洛阳做网站公司地址,专业制作网站是什么,做视频网站推广挣钱吗,海外推广面试问题1.请设计一个类#xff0c;不能被拷贝 拷贝构造函数以及赋值运算符重载#xff0c;因此想要让一个类禁止拷贝#xff0c;只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 //该类不能发生拷贝class NonCopy{public:NonCopy(const NonCopy Nc) delete;NonCopy不能被拷贝 拷贝构造函数以及赋值运算符重载因此想要让一个类禁止拷贝只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 //该类不能发生拷贝class NonCopy{public:NonCopy(const NonCopy Nc) delete;NonCopy operator(const NonCopy Nc) delete;}; 2.请设计一个类只能在堆上创建对象 实现方式 1. 将类的构造函数私有拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。然后提供一个静态的成员函数在该静态成员函数中完成堆对象的创建。 2.将类的析构函数私有然后提供一个公有的Delete函数提供释放资源的功能。 //只能在堆上创建对象class OnlyHeap{public:OnlyHeap():_a(0){}void Delete(){delete this;}private:~OnlyHeap(){}private:int _a;};3. 请设计一个类只能在栈上创建对象
思路同上将构造函数私有化然后设计静态方法创建对象返回即可。
//只能在栈上创建对象class OnlyStack{public:static OnlyStack GetInstance(){OnlyStack st;return st;}void* operator new(size_t n) delete;private:OnlyStack():_a(0){}private:int _a;};
4. 请设计一个类不能被继承
//该类不能被继承class NonInheritable final{}; final关键字final修饰类表示该类不能被继承。 5.单例模式 一个类只能创建一个对象即单例模式该模式可以保证系统中该类只有一个实例并提供一个 访问它的全局访问点该实例被所有程序模块共享。 单例模式有两种实现模式 饿汉模式 就是说不管你将来用不用程序启动时就创建一个唯一的实例对象。 // 饿汉模式 -- 一开始(main函数之前)就创建出对象
// 优点简单、没有线程安全问题
// 缺点
// 1、一个程序中多个单例并且有先后创建初始化顺序要求时饿汉无法控制。
// 比如程序两个单例类A 和 B假设要求A先创建初始化B再创建初始化。
// 2、饿汉单例类初始化时任务多会影响程序启动速度。class MemoryPool{public:static MemoryPool* GetInstance(){return _a;}private:MemoryPool(){}mutex mtx;static MemoryPool* _a;};MemoryPool* MemoryPool::_a new MemoryPool; 懒汉模式 如果单例对象构造十分耗时或者占用很多资源这种情况使用懒汉模式延迟加载更好。
/ 懒汉模式第一次使用对象再创建实例对象
// 优点
// 1、控制顺序。
// 2、不影响启动速度。// 缺点
// 1、相对复杂。线程安全问题
// 2、线程安全问题要处理好class Singleton{public:static Singleton* GetInstance(){if (_a nullptr)//提高效率{_mtx.lock();if (_a nullptr)//保护多线程{_a new Singleton;}_mtx.unlock();}return _a;}static void Delete(){_mtx.lock();if (_a){delete _a;_a nullptr;}_mtx.unlock();}class GC{public:~GC(){Delete();}};// 定义一个静态成员变量程序结束时系统会自动调用它的析构函数从而释放单例对象static GC _gc;private:Singleton(){}private:static mutex _mtx;static Singleton* _a;};Singleton* Singleton::_a nullptr;mutex Singleton::_mtx;Singleton::GC Singleton::_gc;
}