Я пытался писать этот классСтранное поведение для unique_pointer в Visual Studio 2010
#include <memory>
class ContainerUnique
{
public:
ContainerUnique(void);
~ContainerUnique(void);
private:
std::unique_ptr<UniqueElement> u;
};
Где UniqueElement является класс POD определяется в другом месте. Теперь я определяю тело конструктора следующим образом:
ContainerUnique::ContainerUnique(void)
{
auto tmp = new UniqueElement(1);
this->u(tmp); // u is a unique_ptr<UniqueElement>. Should this call compile?
}
И это соответствует без исключений. Запустив программу, я обнаружил, что после вызова конструктора ContainerUnique
u
содержит нулевой указатель.
Является ли это предполагаемым поведением? И какой метод unique_ptr я действительно звоню?
Не уверен в проблемах, с которыми вы сталкиваетесь. Но избегайте их, инициализируя переменную-член u в списке инициализации конструктора. –
Да, это решение, которое я использовал в своем реальном коде, но я все еще не уверен в том, что происходит в этом примере. –
Попробуйте напечатать тип вашей автоматической переменной. Не уверен, работает ли typeid. Как только вы знаете тип, остальное должно быть легко. –