由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 菜鸟请教smart pointer
相关主题
请教一个基本的constructor和destrcutor问题C++里面
请教这个程序里用到了什么constructor啊?有几个copy constructor?[合集] 关于C++ default copy constructor
关于C++ copy-constructor 一个奇怪的问题[合集] C++问题(copy constructor)
question about c++ constructor关于c++的constructor的面试题
一个c++ constructor的问题, thanks包含指针的类和vector的问题
这个类的default constructor怎么写C++默认的copy constructor的疑惑
请教个Bloomberg 的 C++ 题目C++的一个小疑问,求解惑
用包子呼唤大牛们--问关于C++Destructor的问题请教各路C++大神 为什么f(3) 输出是 'dd'
相关话题的讨论汇总
话题: std话题: strblob话题: string话题: vector
进入Programming版参与讨论
1 (共1页)
r**a
发帖数: 536
1
下面的code中,输出为"Constructor, Constructor, Destructor, 3" 前两个
constructors分别是create b1 and b2是出现的。第3个Destructor应该是对应到“b1
= b2;"。我的问题是此时b2已经被free掉了,为啥最后的结果是3呢?哪位大牛给解释
解释。谢谢了。
#include
#include
#include
#include
class StrBlob
{
public:
typedef std::vector::size_type size_type;
StrBlob();
StrBlob(std::vector &il);
size_type size() const { return data->size(); }
bool empty() const { return data->empty(); }
void push_back(const std::string &t) {data->push_back(t);}
void pop_back();
std::string& front();
std::string& back();
~StrBlob() {std::cout << "Destructor" << std::endl;}
private:
std::shared_ptr > data;
void check(size_type i, const std::string &msg) const;
};
StrBlob::StrBlob(): data(std::make_shared >()) {std
::cout << "Constructor" << std::endl;}
StrBlob::StrBlob(std::vector &il): data(std::make_shared vector >(il))
{std::cout << "Constructor" << std::endl;}
int main()
{
StrBlob b1;
{
std::vector a(2, "a");
StrBlob b2(a);
b1 = b2;
b2.push_back("about");
}
std::cout << b1.size() < double temp;
std::cin >> temp;
return 0;
}
X****r
发帖数: 3557
2
首先第3个Destructor对应的是b2.push_back("about");这句之后的}。
因为你用的是shared_ptr,b1=b2;的时候调用的也是share_ptr的copy assignment
operator,所以b1和b2共享同一个vector,你调用b2.push_back和调用
b1.push_back效果是一样的。

b1

【在 r**a 的大作中提到】
: 下面的code中,输出为"Constructor, Constructor, Destructor, 3" 前两个
: constructors分别是create b1 and b2是出现的。第3个Destructor应该是对应到“b1
: = b2;"。我的问题是此时b2已经被free掉了,为啥最后的结果是3呢?哪位大牛给解释
: 解释。谢谢了。
: #include
: #include
: #include
: #include
: class StrBlob
: {

r**a
发帖数: 536
3
我做了个test,你说的是对的。那么我confused是到底什么时候smart pointer会被
free掉呢。是说出了scope吗?我原来以为那个reference counter是0就会调用
destructor,现在看是不对的。

【在 X****r 的大作中提到】
: 首先第3个Destructor对应的是b2.push_back("about");这句之后的}。
: 因为你用的是shared_ptr,b1=b2;的时候调用的也是share_ptr的copy assignment
: operator,所以b1和b2共享同一个vector,你调用b2.push_back和调用
: b1.push_back效果是一样的。
:
: b1

X****r
发帖数: 3557
4
我不明白你的问题。你有两个StrBlob对象b1和b2,他们各有一个
share_ptr > >成员对象b1.data和b2.data,这两个
share_ptr指向同一份vector。b2析构的时候b2.data也析构,但是
b1.data还指向这份vector,引用计数不为零。

【在 r**a 的大作中提到】
: 我做了个test,你说的是对的。那么我confused是到底什么时候smart pointer会被
: free掉呢。是说出了scope吗?我原来以为那个reference counter是0就会调用
: destructor,现在看是不对的。

r**a
发帖数: 536
5
哦,现在我知道我哪里理解错了。多谢多谢。

【在 X****r 的大作中提到】
: 我不明白你的问题。你有两个StrBlob对象b1和b2,他们各有一个
: share_ptr > >成员对象b1.data和b2.data,这两个
: share_ptr指向同一份vector。b2析构的时候b2.data也析构,但是
: b1.data还指向这份vector,引用计数不为零。

1 (共1页)
进入Programming版参与讨论
相关主题
请教各路C++大神 为什么f(3) 输出是 'dd'一个c++ constructor的问题, thanks
c++ 一问这个类的default constructor怎么写
问题请教个Bloomberg 的 C++ 题目
question regarding effective c++ by Meyers用包子呼唤大牛们--问关于C++Destructor的问题
请教一个基本的constructor和destrcutor问题C++里面
请教这个程序里用到了什么constructor啊?有几个copy constructor?[合集] 关于C++ default copy constructor
关于C++ copy-constructor 一个奇怪的问题[合集] C++问题(copy constructor)
question about c++ constructor关于c++的constructor的面试题
相关话题的讨论汇总
话题: std话题: strblob话题: string话题: vector