Я смотрел VID о смарт-указатели (VID ссылка ниже), который идентифицирует следующую задачу с традиционными C++ указатели:Как сказать, к какому классу принадлежит указатель
Вы не можете сказать, кто владеет указатель
Hebert продолжает приводить следующий пример: класс A имеет указатель на float, класс B имеет указатель на тот же самый float. Кто из двух владеет указателем? Ну, вы не можете сказать ... это непонятно ... мы не знаем, чья работа - это удалить указатель .. .bad .. запутанный .. трудно отлаживать.
О чем он говорит? Как мы не можем сказать, какой класс владеет указателем? Если указатель создается как часть экземпляра класса A или B, то не будет ли он просто A-> myPointer и B-> myPointer соответственно?
Thx: ^) Кит
https://www.youtube.com/watch?v=Jc9n9BcYSj4
Около 1:00
EDIT
#include <iostream>
class A {
public: float * f_ptr;
};
class B {
public: float * f_ptr;
};
int main() {
float f=2.71;
A* a = new(A);
B* b = new(B);
a->f_ptr = &f;
b->f_ptr = &f;
std::cout << "a->f_ptr: " << *a->f_ptr << std::endl;
std::cout << "b->f_ptr: " << *b->f_ptr << std::endl;
delete a;
delete b;
std::cout << std::endl;
}
/************
OUTPUT
a->f_ptr: 2.71
b->f_ptr: 2.71
*/
EDIT 2
Следующая запись объясняет это явление очень хорошо:
http://ericlavesson.blogspot.com/2013/03/c-ownership-semantics.html
Они означают, на что указывает указатель. И я предполагаю, что это предполагает, что кому-то, кроме того, что указал сам объект, владеет им. – juanchopanza
raw указатель может иметь только одного владельца, так кто же является владельцем? A или B? –
Да, но проблема в том, что один из классов должен удалить указатель, но не до того, как другой класс перестанет его использовать. Откуда нам знать? Умный указатель мог понять это. –