1

私は完全に共有ポインタのニュースです。私は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 に答える