【C++自学笔记】几个特殊的类(不能被继承、只能在堆上、只能在栈上)

一、实现一个不能被继承的类

1、C++98 中构造函数私有化,派生类中调不到基类的构造函数,则无法被继承;

class NonInherit {
public:
	static NonInherit GetInstance() {
		return NonInherit();
	}
private:
	NonInherit() 
	{ }
};

2、C++11 关键字 final 可以禁止类被继承;

class NonInherit final {

};

二、实现一个类只能在堆上创建对象

构造函数私有化:

  • 将类的构造函数私有化,拷贝构造声明私有,方式别人调用拷贝在栈上生成对象;
  • 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建;
class HeapOnly {
public:
	static HeapOnly* CreateObject() {
		return new HeapOnly;
	}
private:
	HeapOnly()
	{}
	//C++98 只声明,不实现
	HeapOnly(const HeapOnly& h);
	//C++11 
	HeapOnly(const HeapOnly* s) = delete;
};

三、实现一个类只能在栈上创建对象

只能在栈上创建对象,只要将 new 的功能屏蔽掉,也就是屏蔽掉 operator new 和 定位 new 表达式;(屏蔽了 operator 实际上就是屏蔽了 new 的功能)

class StackOnly {
public:
	StackOnly() 
	{}
private:
	void* operator new(size_t size);
	void operator delete(void* p);
};
发布了79 篇原创文章 · 获赞 28 · 访问量 7769

猜你喜欢

转载自blog.csdn.net/weixin_43753894/article/details/99730342
今日推荐