<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Software-Development on Blog di Domenico</title><link>https://blog-9ao.pages.dev/categories/software-development/</link><description>Recent content in Software-Development on Blog di Domenico</description><generator>Hugo</generator><language>it-it</language><lastBuildDate>Thu, 05 Nov 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://blog-9ao.pages.dev/categories/software-development/index.xml" rel="self" type="application/rss+xml"/><item><title>C++ trick #1</title><link>https://blog-9ao.pages.dev/posts/c-trick-1/</link><pubDate>Thu, 05 Nov 2020 00:00:00 +0000</pubDate><guid>https://blog-9ao.pages.dev/posts/c-trick-1/</guid><description>&lt;p&gt;Attenzione a questo tipo di errore a cui sono soggetti gli smart pointer di C++.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;memory&amp;gt;
#include &amp;lt;string&amp;gt;
using namespace std;
class Person {
public:
string name;
Person(string n)
: name(n) {}
~Person() {
cout &amp;lt;&amp;lt; name &amp;lt;&amp;lt; &amp;#34; destroyed&amp;#34; &amp;lt;&amp;lt; endl;
}
};
class Car {
public:
Car(string d, string p)
:driver(d)
,passenger(p) {}
string model;
shared_ptr&amp;lt;Person&amp;gt; drv() { return shared_ptr&amp;lt;Person&amp;gt;(&amp;amp;driver); }
Person driver;
Person passenger;
~Car() {
cout &amp;lt;&amp;lt; model &amp;lt;&amp;lt; &amp;#34; destroyed&amp;#34; &amp;lt;&amp;lt; endl;
}
};
int main()
{
shared_ptr&amp;lt;Person&amp;gt; drv;
{
Car astra(&amp;#34;Domenico&amp;#34;, &amp;#34;Andrea&amp;#34;);
astra.model = &amp;#34;Astra K&amp;#34;;
drv = astra.drv();
}
cout &amp;lt;&amp;lt; &amp;#34;Car&amp;#39;s scope destroyed&amp;#34; &amp;lt;&amp;lt; endl;
// Do you expect drv in a valid state?
cout &amp;lt;&amp;lt; &amp;#34;Using &amp;#34; &amp;lt;&amp;lt; drv-&amp;gt;name &amp;lt;&amp;lt; endl; // Crash!
return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Compila ed esegui&lt;/p&gt;</description></item></channel></rss>