如何开始编写智能指针?
How to begin writing a smart pointer?
大学刚接到一个任务,就是写一个智能指针。我收到了一个骨架,我需要实现所需的方法。如果我是对的,智能指针是一种指针,它计算给定对象的引用号(?),如果该计数器达到零,它会删除给定的对象。
这是骨架:
template<class T>
class my_pointer {
public:
my_pointer();
};
class refcounted {
/* the reference counted types should have the public interface that is defined here */
public:
int incRefCnt();
int decRefCnt();
};
int main() {
my_pointer<refcounted> obj1 = new refcounted();
my_pointer<refcounted> obj2 = obj1;
return 0;
}
首先,这条线应该做什么? refcounted 不是 my_pointer 的子对象,所以我怎么可能实例化一个新的 refcounted 对象并用 my_pointer 对象(指针?)引用它?
my_pointer<refcounted> obj1 = new refcounted();
为什么 my_pointer class 中没有计数器,为什么 refcounted class 中有计数器?我应该如何开始呢?我不太擅长c++。提前致谢!
将我的评论扩展为答案:
第一个问题:该行应该做的是在堆上创建一个refcounted
类型的新对象,然后使用隐式转换构造函数创建指向该对象的智能指针,递增它的内部引用计数。
第二个问题:看来您应该实现一个侵入式引用计数智能指针,其中引用计数存储在指向的对象中。这就是两个引用计数函数的作用。侵入式引用计数的优点是更 space 高效(因为您不需要单独分配引用计数),并且您可以采用原始指针并将其简单地转换为智能指针,而无需关心其他已经存在的智能指针。缺点是不能指向任意类型,不支持弱指针
第三题:你先想想创建、复制、销毁智能指针是什么意思
Firstly, what should this line do?
my_pointer<refcounted> obj1 = new refcounted();
该行应该从传递给它的 refcounted
原始指针初始化一个 my_pointer<refcounted>
智能指针。
how can I possibly instantiate a new refcounted object and reference it with a my_pointer object (pointer?)?
您可以使用 converting constructor 来完成。 my_pointer
没有接受 T*
的构造函数,因此似乎留给您定义。
Why isn't there a counter in the my_pointer class, and why is the counter in the refcounted class?
您的任务显然是创建一个侵入式指针,它期望存储的对象进行引用计数。
How should I start with this?
我会看一眼boost::intrusive_ptr的描述和界面。不过,您的作业可能不需要那么完整的界面。
大学刚接到一个任务,就是写一个智能指针。我收到了一个骨架,我需要实现所需的方法。如果我是对的,智能指针是一种指针,它计算给定对象的引用号(?),如果该计数器达到零,它会删除给定的对象。
这是骨架:
template<class T>
class my_pointer {
public:
my_pointer();
};
class refcounted {
/* the reference counted types should have the public interface that is defined here */
public:
int incRefCnt();
int decRefCnt();
};
int main() {
my_pointer<refcounted> obj1 = new refcounted();
my_pointer<refcounted> obj2 = obj1;
return 0;
}
首先,这条线应该做什么? refcounted 不是 my_pointer 的子对象,所以我怎么可能实例化一个新的 refcounted 对象并用 my_pointer 对象(指针?)引用它?
my_pointer<refcounted> obj1 = new refcounted();
为什么 my_pointer class 中没有计数器,为什么 refcounted class 中有计数器?我应该如何开始呢?我不太擅长c++。提前致谢!
将我的评论扩展为答案:
第一个问题:该行应该做的是在堆上创建一个refcounted
类型的新对象,然后使用隐式转换构造函数创建指向该对象的智能指针,递增它的内部引用计数。
第二个问题:看来您应该实现一个侵入式引用计数智能指针,其中引用计数存储在指向的对象中。这就是两个引用计数函数的作用。侵入式引用计数的优点是更 space 高效(因为您不需要单独分配引用计数),并且您可以采用原始指针并将其简单地转换为智能指针,而无需关心其他已经存在的智能指针。缺点是不能指向任意类型,不支持弱指针
第三题:你先想想创建、复制、销毁智能指针是什么意思
Firstly, what should this line do?
my_pointer<refcounted> obj1 = new refcounted();
该行应该从传递给它的 refcounted
原始指针初始化一个 my_pointer<refcounted>
智能指针。
how can I possibly instantiate a new refcounted object and reference it with a my_pointer object (pointer?)?
您可以使用 converting constructor 来完成。 my_pointer
没有接受 T*
的构造函数,因此似乎留给您定义。
Why isn't there a counter in the my_pointer class, and why is the counter in the refcounted class?
您的任务显然是创建一个侵入式指针,它期望存储的对象进行引用计数。
How should I start with this?
我会看一眼boost::intrusive_ptr的描述和界面。不过,您的作业可能不需要那么完整的界面。