矢量可以包含一个智能指针,该指针重载运算符&?
can vector contain a smart pointer which overload operator &?
例如,我有这样一个智能指针:
template <typename T>
class SmartPointer
{
public:
....
T* operator & () { return m_p; }
private:
T* m_p;
}
void foo()
{
std::vector<SmartPointer<int> >vec;
vec.push_back(....);
vec.resize(.....);
......
}
这种用法安全吗?我在MINGW4.4中试用,效果不错…
事实上,这些代码是为COM使用的,当我想得到一个对象时,我需要做这些
SmpartPointer<COMObj> spObj;
HRESULT hr = xxxxx->QueryInterface(&spObj);
然后我想把指针存储在一个向量中,所以
std::vector<SmpartPointer<COMObj> >vec;
.....
在C++03中,没有显式要求容器中的值类型不重载一元operator&
;然而,根据23.1p3,存储的对象需要对CopyConstructible
进行建模(20.1.3p1,表30)。这反过来要求表达式&t
应当产生表示t
的地址的类型T *
的值。因此,重载的一元operator&
是允许的,但前提是它具有"正确"的返回类型并返回正确的值。
您的operator&
无效;它应该返回CCD_ 8。
在C++11中,这一点被放宽了(通过使用std::addressof
),因此一元operator&
可以具有任何类型并返回任何值。
在所有版本的标准中,complex
和valarray
的类型参数不得重载一元operator&
;这是为了允许将它们视为连续存储。
相关文章:
- C++指针复制重载
- 如何在基类指针向量的元素上应用重载的多态函数
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 指向重载静态成员的函数指针 - 在unique_ptr中用作自定义删除器
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 类重载运算符 '<' 插入指向该对象集的共享指针时不调用
- 使用继承的指针列表复制构造函数或重载运算符=
- 为指针重载运算符++
- 如何从模板类重载创建的指针对象上的运算符?
- 用指针重载运算符+
- 函数指针重载函数
- 函数指针重载错误
- 矢量可以包含一个智能指针,该指针重载运算符&?
- 模板函数指针重载
- C++:使用函数指针重载<<运算符
- 将nullptr参数委托给模板代码中的指针重载
- 用模板和指针重载数组操作符
- STL优先级队列和指针重载