gpt4 book ai didi

c++ - 将 `this` 作为 shared_ptr 传递给函数

转载 作者:行者123 更新时间:2023-12-05 09:26:32 25 4
gpt4 key购买 nike

我正在编写一些示例代码,希望能捕捉到我当前的挣扎。假设我有一些通用形状的类 Shape和一个很好的函数,可以将任何形状的周长加倍

float DoublePerimeter (shared_ptr<Shape> shape)
return 2*shape->GetPerimeter();
};

是否可以在类本身中使用这样的函数?

class Square : Shape {
float side = 1;
public:
void Square(float aside) : side(aside) {;}
float GetPerimeter(){return 4*side;}
void Computation() { DoublePerimeter (??????);}
};

我可以在 ?????? 中传递什么?使这项工作?我尝试使用类似的东西

shared_ptr<Shape> share_this(this);

也试过enable_shared_from_this<>对于我的类(class),但是我传递给函数的指针总是在锁定时返回 null。这甚至可能,还是这个糟糕的设计?我是否被迫将此函数设为成员函数?

最佳答案

如果您不想使用 enable_shared_from_this,可能是因为您的对象总是由共享指针拥有,您始终可以通过使用 no 来解决它-op删除器:

void nodelete(void*) {}

void Square::Computation() { DoublePerimeter({this, nodelete}); }

但这是一个 hack(而且是一个相当昂贵的 hack,因为你正在分配和取消分配一个控制 block 只是为了配置你正在调用的函数)。

一种更简洁的解决方案(尽管可能需要更多输入)是将您的自由函数实现与所有权方案分开:

float DoublePerimeter(Shape const& shape)
return 2*shape.GetPerimeter();
};

float DoublePerimeter(std::shared_ptr<Shape> shape)
return DoublePerimeter(*shape);
};

void Square::Computation() const { DoublePerimeter(*this); }

关于c++ - 将 `this` 作为 shared_ptr 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73825946/

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