Привет, я делаю свой собственный умный указатель с подсчетом ссылок, но прежде чем я начну, есть две концепции, которые я не совсем понимаю.
Я понимаю, что когда создается общий указатель, указывающий на объект, я должен выделить память для структуры / класса, который будет содержать такую информацию, как счетчик ссылок (изначально один) и, возможно, мьютекс для увеличения и уменьшения. Когда я использую, скажем, оператор =, чтобы другой общий указатель также указывал на этот объект, я также передаю указатель на эту структуру / класс этому новому указателю, чтобы я мог увеличивать счетчик. Мой вопрос: если я сделаю третий общий указатель, указывающий на этот объект (без использования конструктора копирования или оператора =), то этот указатель не будет знать о структуре и, следовательно, будет иметь счетчик ссылок 1, если я затем удалю указатель, счетчик достигнет 0, и объект будет уничтожен, когда на самом деле есть два других указателя для этого объекта?
Если общий указатель имеет счетчик ссылок 1, а затем создается несколько потоков, если один поток завершает / уничтожает его, что происходит с другими потоками, которые могут все еще работать?
shared_ptr<T> foo(new T); shared_ptr<T> bar = foo; shared_ptr<T> quux(foo.get());
? - person Barry   schedule 09.05.2016std::unique_ptr
иstd::shared_ptr
- не изобретайте велосипед. - person Jesper Juhl   schedule 09.05.2016