注册 登录
编程论坛 C++教室

智能指针不可以解引用赋值吗?

令狐少侠56 发布于 2017-03-05 12:55, 2418 次点击
#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 ;
}
6 回复
#2
yangfrancis2017-03-05 15:23
p1=str;试试看呢
#3
令狐少侠562017-03-05 15:31
回复 2楼 yangfrancis
直接说没有匹配的=运算符了
#4
rjsp2017-03-06 08:29
程序代码:
#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;
}
#5
令狐少侠562017-03-08 10:38
以下是引用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;
}
#6
rjsp2017-03-08 10:48
回复 5楼 令狐少侠56
不太能听得懂你想问什么

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

make_shared<string>(  )返回的不是NULL?
如果返回NULL,那C++何必创造make_shared这个模板,直接写个NULL多方便
#7
令狐少侠562017-03-08 10:57
以下是引用rjsp在2017-3-8 10:48:02的发言:

不太能听得懂你想问什么

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

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

因为觉得make_shared<string>(  )这里括号里面是空的,所以返回了一个NULL
1