Кто-нибудь знает причину второго вызова?
Поскольку построены два объекта.При std::make_shared<TC>(TC());
временное TC
сначала создается TC()
, затем оно копируется для создания 2-го объекта, которым управляет std::shared_ptr
.
. Вы можете добавить конструктор копирования / перемещения дляболее четкое наблюдение;вы увидите дважды строительство и два разрушения.например,
class TC
{
public:
TC()
{
i_idx = s_idx++;
Serial.printf("TC Construct %d\r\n", i_idx);
}
TC(const TC&)
{
i_idx = s_idx++;
Serial.printf("TC copy Construct %d\r\n", i_idx);
}
TC(TC&&)
{
i_idx = s_idx++;
Serial.printf("TC move Construct %d\r\n", i_idx);
}
virtual ~TC()
{
Serial.printf("TC Deconstruct %d\r\n",i_idx);
}
int i_idx;
static int s_idx;
};
Кстати: для этого случая временный ненужный, вы можете просто std::make_shared<TC>();
.