Junior — Senior
58
Неправильная инициализация в конструкторе SharedPtr: какие последствия
Условие задачи
Что произойдёт, если выполнить приведённый ниже код? Нужно проанализировать реализацию конструктора SharedPtr(T* p): корректно ли он инициализирует внутренний указатель и что происходит с переданным указателем p.
int* raw = new int;
std::shared_ptr<int> sp(raw);
template <class T>
class SharedPtr {
int* counterPtr = nullptr;
T* dataPtr = nullptr;
public:
SharedPtr() = default;
SharedPtr(const SharedPtr& other) {
dataPtr = other.dataPtr;
counterPtr = other.counterPtr;
(*counterPtr)++;
}
SharedPtr(T* rawPtr) {
counterPtr = new int(0);
dataPtr = new T; // проблема здесь
}
};