【发布时间】:2026-01-11 22:25:01
【问题描述】:
我试着写这门课
#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 方法?
【问题讨论】:
-
不确定您遇到的问题。但是通过在构造函数的 initialaztrion 列表中初始化成员变量 u 来避免它们。
-
是的,这是我在真实代码中使用的解决方案,但我仍然不确定示例中发生了什么。
-
尝试打印自动变量的类型。不确定 typeid 是否有效。一旦你知道了类型,剩下的就很容易了。
标签: c++ visual-studio-2010 visual-c++ c++11 unique-ptr