我完全是分享指针的新闻。我正在尝试通过
初始化一个std::shared_ptr<Gdiplus::Pen> pen(new Gdiplus::Pen);
但它说它需要一个类型说明符....我也试图将这个共享指针设置为 常规指针。谁能解释我这是如何工作的。非常感谢
#pragma once
class Shape
{
public:
Shape();
Gdiplus::Point start;
Gdiplus::Point end;
std::shared_ptr<Gdiplus::Pen> pen(new Gdiplus::Pen());
virtual LRESULT Draw(Gdiplus::Graphics * m_GraphicsImage) = 0;
void setPen(Gdiplus::Pen * pen2) {
pen.get() = pen2;
}
void setStart(int xPos, int yPos) {
start.X = xPos;
start.Y = yPos;
}
void setEnd(int xCor, int yCor) {
end.X = xCor;
end.Y = yCor;
}
};
答案 0 :(得分:3)
std::shared_ptr<Gdiplus::Pen> pen(new Gdiplus::Pen);
应该是
std::shared_ptr<Gdiplus::Pen> pen(new Gdiplus::Pen(brush, width));
或者你的构造函数是什么样的
从shared_ptr获取原始指针
setPen(pen.get());
提示:小心设置由智能指针控制的原始指针。你确定你不想传递智能指针(共享或唯一)吗?
您还应该通过std帮助函数
创建共享指针auto pen = std::make_shared<Gdiplus::Pen>(brush, width);
答案 1 :(得分:0)
使用shared_ptr中的get
将其作为原始指针传递:
setPen(pen.get());
但请确保您没有将其存储在setPen中。这会在以后导致令人讨厌的错误。