html5网站 欣赏,php网站开发招聘需求分析,做搜索的网站有哪些,酒店用品网站建设目录
一、设计一个类#xff0c;不能被拷贝
二、设计一个类#xff0c;只能在堆上创建对象
方案一、析构函数私有
方案二、构造函数私有 三、设计一个类#xff0c;只能在栈上创建对象 四、设计一个类#xff0c;不能被继承 一、设计一个类#xff0c;不能被拷…目录
一、设计一个类不能被拷贝
二、设计一个类只能在堆上创建对象
方案一、析构函数私有
方案二、构造函数私有 三、设计一个类只能在栈上创建对象 四、设计一个类不能被继承 一、设计一个类不能被拷贝 拷贝在类中通常会发生在这两种场景 --- 拷贝构造 和 赋值重载。因此想让一个类不能禁止拷贝只需要让这个类不能调用拷贝构造函数和赋值运算符重载函数即可。
c98 将拷贝构造函数与赋值运算符重载只声明不定义并且将其访问权限设置为私有即可。
class Copy
{//...
pirvate:Copy(const Copy cp);Copy operator(const Copy cp);
};
c11 C11扩展delete的用法delete除了释放new申请的资源外如果在默认成员函数后跟上 delete表示让编译器删除掉该默认成员函数。
class Copy
{//...
pirvate:Copy(const Copy cp) delete;Copy operator(const Copy cp) delete;
};
二、设计一个类只能在堆上创建对象
方案一、析构函数私有
class HeapOnly
{
public:void Destory(){delete this;}
private:~HeapOnly(){cout ~HeapOnly() endl;}
};int main()
{HeapOnly* HPtr new HeapOnly;HPtr-Destory();return 0;
}
方案二、构造函数私有
class HeapOnly
{
public:static HeapOnly* CreateObj(){return new HeapOnly;}HeapOnly(const HeapOnly ho) delete;//HeapOnly operator(const HeapOnly ho) delete;
private:HeapOnly(){std::cout HeapOnly() std::endl;}
};int main()
{HeapOnly* HPtr HeapOnly::CreateObj();//HeapOnly copy(*HPtr);//HeapOnly copy *HPtr;return 0;
} 三、设计一个类只能在栈上创建对象
class StackOnly
{
public:static StackOnly CreateObj(){StackOnly obj;return obj;}//实现类专属的operator newvoid* operator new(size_t size) delete;
private:StackOnly(){std::cout StackOnly() std::endl;}
};int main()
{StackOnly ptr StackOnly::CreateObj();//StackOnly* ptr1 new StackOnly(ptr);return 0;
} 四、设计一个类不能被继承
c98将构造函数私有
// C98中构造函数私有化派生类中调不到基类的构造函数。则无法继承
class NonInherit
{
public:static NonInherit GetInstance(){return NonInherit();}
private:NonInherit(){}
}; c11新增关键字final
class A final
{// ....
};