0
#include<iostream>

using namespace std;


class shared_ptr
{
    public:
    int *pointer;
    public:
    shared_ptr()
    {
        pointer = new int;
    }
    ~shared_ptr()
    {
        delete pointer;
    }
    int operator* ();
    int* operator= (shared_ptr&);
};

int shared_ptr:: operator* ()
{
    return *(this->pointer);
}

int* shared_ptr:: operator= (shared_ptr& temp)
{
    return (temp.pointer);
}

int main()
{
    shared_ptr s1;
    *(s1.pointer) = 10;
    cout << *s1 << endl;
    int *k;
    k = s1;         //error
    cout << *k << endl;
}

スマートポインターのようなものを作成しようとしています。

operator = をオーバーロードしようとすると、次のエラーが発生します。

prog.cpp:39:9: エラー: k = s1 代入行の代入で 'shared_ptr' を 'int*' に変換できません。ここで何が欠けていますか?

4

2 に答える 2

1

Operator =戻りますが、を取得するコンストラクターがありませint*int*。追加:

shared_ptr(int *other)
{
    pointer = new int(*other);
}
于 2013-07-04T21:33:39.263 に答える
1

あなたは提供operator =しました

shared_ptr = shared_ptr 

ケース(非常に奇妙な演算子ところで)。しかし、あなたは使おうとしています

int* = shared_ptr

これを可能にするには、shared_ptr に getter または cast-operator が必要です。

実際には次のように使用できます

shared_ptr s1, s2;
...
int* k = (s1 = s2);

デモ

でも絶対にダサい

于 2013-07-04T21:23:11.007 に答える