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
的哑指针。