一、C++98如何禁用拷贝构造与拷贝赋值
将这2个函数的声明写在private中,且不去定义。此时,在类外面调用就会报函数不可访问。不去定义是为了阻止成员函数或类的友元调用,此时,会在链接处报错
二、C++中使用=delete来完成上述操作,通常delete掉的函数会写在public中,否则会报错信息不明确
三、delete可以用来删除任何函数
bool isLucky(int number);
isisLucky('a'); //类型转换
bool isLucky(int number);
bool isLucky(char)=delete;
isisLucky('a'); //报错
四、delete可以禁止模版的实例化
#include <iostream>
#include <string>
#include <vector>struct B;struct A
{A(int data) : _data(_data){};A(const A &a) = delete;A &operator=(const A &) = delete;private:friend B;int _data;
};struct B
{B(){A a(10);// A b = a;}
};bool isLucky(int a)
{return a == 7;
}bool isLucky(char) = delete;template <typename T>
void processPointer(T *ptr)
{
}template <>
void processPointer<void>(void *ptr) = delete;int main()
{A a(10);// A aaa = a;B b;isLucky(32);// isLucky('a');int aa = 10;void *aaptr = reinterpret_cast<void *>(&aa);// processPointer(aaptr);return 0;
}