1

我完全是共享指针的新闻。我正在尝试通过做初始化一个

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;
}

};

4

2 回答 2

4
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);
于 2013-03-26T22:37:06.463 回答
0

使用getshared_ptr 将其作为原始指针传递:

setPen(pen.get());

但请确保您没有将其存储在 setPen 中。这将在以后导致令人讨厌的错误。

于 2013-03-26T22:37:24.343 回答