gpt4 book ai didi

c++ - 取消引用从函数返回的 shared_ptr

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:06 26 4
gpt4 key购买 nike

我有课,DevicePointer ,它封装了一个 std::shared_ptr<Device> .需要保存指向设备的指针的各种类派生自 DevicePointer .在我开始使用之前 shared_ptr , DevicePointer有一个::Expose()将返回指向设备的原始指针的函数。现在我正在使用 shared_ptr 来保存设备指针,我不确定如何返回它。请注意,唯一的原因是 ::Expose应该调用的是取消引用指针。

这是原始 Expose 的样子:

Device * Expose() const  { return MyDevice; }

并且会像这样使用:

Device::Expose()->ExecuteFunction(a, b, c);

现在MyDevicestd::shared_ptr<Device> ,我不确定如何返回它以取消引用。显而易见的选择是:

std::shared_ptr<Device> Expose() {
return MyDevice;
}

但我担心性能,尤其是新临时文件的创建 std::shared_ptr .所以我需要某种方式来表达“你可以取消引用这个指针,但你不能复制它”。原始文件仍然需要共享,因为许多对象将持有对它的引用。

我希望我已经充分阐明了我的问题。谢谢。

最佳答案

这不会影响性能

Device & Expose() {
return *MyDevice.get();
}

编辑:

使对象不可复制:

class Device
{

private:
//compiler will throw errors when copy constructor or = is called in the code
Device(const Device &)
{}
void operator = (const Device &)
{
}
};

编辑(2018-09-05):

从 c++11 开始,您可以显式删除复制构造函数或赋值运算符:

class Device
{
public:
Device(const Device &) = delete;
Device& operator = (const Device &) = delete;
};

关于c++ - 取消引用从函数返回的 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19794803/

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