gpt4 book ai didi

c++ - Visual Studio 2010 中 unique_pointer 的奇怪行为

转载 作者:IT老高 更新时间:2023-10-28 23:10:09 26 4
gpt4 key购买 nike

我试着写这门课

#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?
}

而且它毫无异常(exception)地遵守。运行程序发现ContainerUnique的构造函数被调用后,u包含了一个空指针。

这是预期的行为吗?我实际调用的是什么 unique_ptr 方法?

最佳答案

This is a known problem with VS2010's unique_ptr.如果它是空的,它公开继承自它的删除器作为优化(空基优化)。公共(public)继承的缺点是删除器的所有成员也成为 unique_ptr 的可用成员,在这种情况下,它的 operator()(T*) 删除指针。

在 VS2012 的库中修复了该错误,其中继承更改为私有(private)。

关于c++ - Visual Studio 2010 中 unique_pointer 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11295601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com