Earlier quoted context omitted.
You aren't reading it properly, the documentation you are reading is for the case you leave the work to the GC, you can take it yourself C++ RAII style: { using my_socket = new NetworkSocket() } // my_socket no longer exists when code arrives here Or even better if NetworkSocket is a struct, it gets stack allocated, zero GC.
NetworkComponent foo = new NetworkComponent(); { using my_socket = new NetworkSocket(); foo.socket = my_socket; } foo.do_sth_with_socket(); // oops, runtime failure, socket closed
Here is your Rust version, enjoy.
use std::io::{self};
struct NetworkComponent {
socket : NetworkSocket
}
impl NetworkComponent {
fn new() -> NetworkComponent {
println!("Creating NetworkComponent");
NetworkComponent {
socket : NetworkSocket{}
}
}
fn do_sth_with_socket(&self) {
}
}
impl Drop for NetworkComponent {
fn drop(&mut self) {
println!("Dropping NetworkComponent");
}
}
struct NetworkSocket {
}
impl Drop for NetworkSocket {
fn drop(&mut self) {
println!("Dropping NetworkSocket");
}
}
fn main() -> io::Result {
let mut foo = NetworkComponent::new();
{
let socket = NetworkSocket{};
foo.socket = socket;
}
foo.do_sth_with_socket(); // oops, runtime failure, socket closed
Ok(())
}
https://play.rust-lang.org/?version=stable&mode=debug&editio...