К примеру, у меня есть такой умный указатель:может содержать указатель, который перегружает оператор &?
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;
.....
Я не понимаю, почему это не должно быть безопасным? 'vector' являются шаблонами, поэтому все, что вы делаете, будет основано на шаблоне, должно быть таким же безопасным, как и все остальное. –
Зачем вам это делать? Если 'p' был нормальным указателем, вы бы не ожидали, что' & p' вернет указатель. Предоставление перегруженным операторам различной семантики - хороший способ вызвать ошибки позже. –
Если для реализации 'std :: vector' требуется внутренний указатель на свои данные, я бы ожидал, что он будет использовать' std :: addressof' или 'allocator :: address' для его получения. – Angew