C++ 如何使用成员作为其他类的对象?

C++ 如何使用成员作为其他类的对象?,c++,pointers,C++,Pointers,我想创建ABC的成员变量sptr,它是其他类的对象SmartPointer。然后为该成员变量赋值 #include<stdio.h> #include<iostream> using namespace std; class SmartPointer { private: int *ptr; public: SmartPointer(int *p); int& operator *();

我想创建
ABC
的成员变量
sptr
,它是其他类的对象
SmartPointer
。然后为该成员变量赋值

#include<stdio.h>
#include<iostream>
using namespace std;


class SmartPointer
{
    private:
        int *ptr;

    public:
        SmartPointer(int *p);
        int& operator *();
        ~SmartPointer();
};

SmartPointer::SmartPointer(int *p = NULL)
{
    cout<<"Initilaize SmartPointer"<<p<< endl;
    ptr = p;
}

int& SmartPointer:: operator *()
{  
    return *ptr; 
}


SmartPointer::~SmartPointer()
{

    cout<<"De-Initilaize SmartPointer"<<endl;
    delete ptr;
}


class ABC
{
    private:
        int a;
        SmartPointer *sptr;
        int ref;
    public:
        ABC();                           // Simple constructor.
        ABC(int a, int b);               // Parameterized constructor.
     //     ABC(const ABC &obj);             // Copy constructor.
        ~ABC();                          // Destructor.
        void display();                  // Display.
    //  ABC& operator=(const ABC &obj);  // Operator Overload.
};


ABC::ABC() 
{
    ref= 1;
}


ABC::ABC(int a, int b) 
{
    cout << "Parameterized constructor input" << endl;
    // allocate memory for the pointer;
    sptr = new SmartPointer(&a);
    cout << "Parameterized constructor Out"<<sptr << endl;
}

ABC::~ABC(void) 
{
    cout << "Freeing memory!" << endl;
    ref --;
    if(ref==0)
    {  
        //delete sptr;
    }
}


void ABC::display() 
{

}


int main()
{
//  int a = 10;
//  SmartPointer obj1(&a);

    // Normal.
    ABC obj2(1, 2);

    return 0;
}
#包括
#包括
使用名称空间std;
类智能指针
{
私人:
int*ptr;
公众:
智能指针(int*p);
int&运算符*();
~SmartPointer();
};
SmartPointer::SmartPointer(int*p=NULL)
{

能引用指针吗?在不知道如何解引用指针的情况下,您是如何做到这一点的?我的意思是,您为指针编写了一个函数:
int&operator*()
EDIT:我应该说你从别处复制粘贴了SmartPointer的定义,因为你显然不知道如何使用它。
SmartPointer
最终会对传入的指针调用
delete
,你会得到一个segfault,因为
a
在堆栈上,而不是在堆上。我要添加
>
SmartPointer
中的ref
变量,该变量将计算
ABC
中有多少对象使用相同的
SmartPointer
对象。如果
ref
1
,则从
SmartPointer
的析构函数中删除
ptr
,否则只需递减
ref
值。但我无法获得如何执行assign并获取值。这“聪明”与普通的
int*
相比,成员似乎没有任何优势。在那里使用该类有什么意义?如果您想要引用计数指针,请使用
std::shared\u ptr
。如果您想要自己的引用计数指针,最好先研究std::shared\u ptr。提示:std::shared\u ptr不会将计数器保留在指针。可能有许多指针指向同一个对象,它们都需要使用同一个计数器。TBH,我认为您应该仍在进行基础工作。“创建成员变量sptr,它是其他类SmartPointer的对象”然后编写
SmartPointer*sptr;
。不,这不是
SmartPointer
类型的成员。这是指向
SmartPointer
的哑指针。