如何设置指向常规指针的共享指针

时间:2013-03-26 22:36:03

标签: c++ pointers shared-ptr

我完全是分享指针的新闻。我正在尝试通过

初始化一个
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;
}

};

2 个答案:

答案 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中。这会在以后导致令人讨厌的错误。