我采用的方法是创建一个类表示,它引入了一种语义,指定支持数据是static
. 然后只需确保它不能被简单地构建,或者它的数据重新分配。
所以不,没有直接的语言特征,但引入语义很容易。
下面是一个关于如何防止客户端意外将标准数据提升到不朽数据容器的说明:
template <typename T>
class t_immortal_data_container {
public:
// how clients create t_immortal_data_container<T>,
// avoiding implicit promotions:
static t_immortal_data_container Create(T& pImmortalData) {
return t_immortal_data_container(pImmortalData);
}
~t_immortal_data_container() {
}
public:
...
private:
// private: ensure t_immortal_data_container<T> only can use
// this constructor:
t_immortal_data_container(T& pData) : d_immortalData(pData) {
}
private:
T d_immortalData; /* << as pointer or reference */
private:
// prohibited -- no definition
t_immortal_data_container() /* = delete */ ;
};
然后您更新您的程序以接受此类型作为参数,并相应地处理这些情况。