C++ 原子变量指针所有权

C++ 原子变量指针所有权,c++,pointers,c++11,atomic,C++,Pointers,C++11,Atomic,“包含”指针的原子变量是否拥有指针的所有权 考虑以下代码段: { std::atomic<Foo*> bar(new Foo()); } // `bar' went out of scope, did it delete pointer to instance of Foo? { std::原子条(newfoo()); } //'bar'超出范围,是否删除了指向Foo实例的指针? 当然,我可以自己推导和删除它,或者用另一种方式解决它;但这不是重点 这里定义的行为是什么,

“包含”指针的原子变量是否拥有指针的所有权

考虑以下代码段:

{
    std::atomic<Foo*> bar(new Foo());
}

// `bar' went out of scope, did it delete pointer to instance of Foo?
{
std::原子条(newfoo());
}
//'bar'超出范围,是否删除了指向Foo实例的指针?
当然,我可以自己推导和删除它,或者用另一种方式解决它;但这不是重点


这里定义的行为是什么,如果有的话?

不,唯一的
std::atomic
保证的是对象将不受数据竞争的影响。这样你就可以释放指针指向你自己的内存


如果您想要一个托管的动态内存容器,那么可以使用或。

否,
std::atomic
唯一能保证的是对象不会出现数据争用。这样你就可以释放指针指向你自己的内存

如果您想要托管动态内存容器,请使用或。

否。
std::atomic
有一个不做任何事情的小型析构函数,因此如果它拥有它,它就不能删除任何东西

std::atomic
不“拥有”整数,它只存储一个值,类似地,
std::atomic
只存储一个值,不包含所有权或释放。

否。
std::atomic
有一个微不足道的析构函数,它什么都不做,因此如果拥有它,它就不能删除任何内容


std::atomic
不“拥有”整数,它只存储一个值,类似地,
std::atomic
只存储一个值,不包含所有权或释放。

感谢您的回复。为了完整起见,一种(正确的)方法是:
删除条。在
超出范围之前加载(…)
?我知道“智能”指针,但我希望这里有一个裸体指针:-)@pauluss86这很好,但如果你决定这样做,那么你必须强制执行,在删除bar后,没有人使用它的内部值。在真实场景中,它是一个只在内部使用的完全私有成员。我刚刚实现了封装类的析构函数,因此问题就来了。在选择答案之前,我会将问题保留几个小时。谢谢你的回答。为了完整起见,一种(正确的)方法是:
删除条。在
超出范围之前加载(…)
?我知道“智能”指针,但我希望这里有一个裸体指针:-)@pauluss86这很好,但如果你决定这样做,那么你必须强制执行,在删除bar后,没有人使用它的内部值。在真实场景中,它是一个只在内部使用的完全私有成员。我刚刚实现了封装类的析构函数,因此问题就来了。在选择答案之前,我会将问题保留几个小时。当您在原子指针上执行
.store
时,它是存储指针还是存储指针对象(即指针指向的位置)?当您在原子指针上执行
.store
时,它是存储指针还是存储指针对象(指针指向的地方)?