标题:智能指针不可以解引用赋值吗?
只看楼主
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
已结贴  问题点数:20 回复次数:6 
智能指针不可以解引用赋值吗?
#include <iostream>
#include <stdio.h>
#include <memory>
#include <string>

using namespace std;

int main(   )
{
    shared_ptr<string> p1 ;
    string str = "abc" ;
   
    if ( !p1 ) {   
        *p1 = str ;
    }
    cout<<*p1<<endl;
    return 0 ;
}
搜索更多相关主题的帖子: include 智能 
2017-03-05 12:55
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:20 
p1=str;试试看呢
2017-03-05 15:23
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
得分:0 
回复 2楼 yangfrancis
直接说没有匹配的=运算符了
2017-03-05 15:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <iostream>
#include <memory>
#include <string>
using namespace std;

int main( void )
{
    shared_ptr<string> p = std::make_shared<string>();

    *p = "abc";
    cout << *p << endl;

    return 0;
}
2017-03-06 08:29
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
得分:0 
以下是引用rjsp在2017-3-6 08:29:30的发言:

#include <iostream>
#include <memory>
#include <string>
using namespace std;

int main( void )
{
    shared_ptr<string> p = std::make_shared<string>();

    *p = "abc";
    cout << *p << endl;

    return 0;
}

看了版主的代码改成了下面这样,结果输出为空,然后我去掉了if (!p1),
输出成功了。为什么 需要p1 = make_shared<string>(  ),这是为指针开辟空间吗?
像代码int *a=NULL;(*a) = 3;cout << *a << endl;这一定错了因为没有为指针开辟空间,这里的make_shared<string>(  )返回的不是NULL?
程序代码:
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#include <memory>
#include <string>
using namespace std ;

int main(  )
{
    shared_ptr<string> p1 = make_shared<string>(  ) ;
    string str = "abc";

    *p1 = str;
    
    cout << (*p1) << endl;

    return 0;
}
2017-03-08 10:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 5楼 令狐少侠56
不太能听得懂你想问什么

为什么 需要p1 = make_shared<string>()
就像 int* p = new int(0); 一样

make_shared<string>(  )返回的不是NULL?
如果返回NULL,那C++何必创造make_shared这个模板,直接写个NULL多方便
2017-03-08 10:48
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
得分:0 
以下是引用rjsp在2017-3-8 10:48:02的发言:

不太能听得懂你想问什么

就像 int* p = new int(0); 一样

如果返回NULL,那C++何必创造make_shared这个模板,直接写个NULL多方便

因为觉得make_shared<string>(  )这里括号里面是空的,所以返回了一个NULL
2017-03-08 10:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-474762-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083911 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved