Dereference a pointer

Chào cả nhà
Mình có chút thắc mắc về dereference a pointer, mong mọi người giải thích giúp mình với ạ

Trong tài liệu có viết

To declare a pointer, write the type of the variable or object whose address will be stored in the pointer, followed by the pointer operator (*) and the name of the pointer. For example,

unsigned short int * pPointer = 0;

To assign or initialize a pointer, prepend the name of the variable whose address is being assigned with the address of operator (&). For example,

unsigned short int theVariable = 5; unsigned short int * pPointer = & theVariable;

To dereference a pointer, prepend the pointer name with the dereference operator (*). For example,

unsigned short int theValue = *pPointer

Sau đó mình đã tạo 1 đoạn code như thế này

class CMstFile
{
public:
	CMstFile();
	~CMstFile();

	void 	SetName( const CString&  sName);
	CString GetName();

private:
	CString m_sName;
};

CMstFile::CMstFile()
{
	
}

CMstFile::~CMstFile()
{	

}

void CMstFile::SetName(
	const CString& sName		//   (I)    ファイル名
){
	m_sName = sName;
}

CString CMstFile::GetName()
{
	return m_sName;			// (O) ファイル名
}

int CDataFnameYkdnSps::SaveLoadYkdnSps(int isvldflg)
{
	int	iret = 0;
	POSITION pos;
	CString sFileSaveLoad; 
	CMstFile *pMstFile;
	CList<CMstFile*, CMstFile*>		lListFile;
	
	pMstFile = new CMstFile();
	pMstFile->SetName( "netsugenki.tbl" );
	lListFile.AddTail(pMstFile);

	pMstFile = new CMstFile();
	pMstFile->SetName("ngryo.tbl");
	lListFile.AddTail(pMstFile);
	
	pMstFile = new CMstFile();
	pMstFile->SetName("tatgngryo.tbl");
	lListFile.AddTail(pMstFile);
	
	pMstFile = new CMstFile();
	pMstFile->SetName("YkdSpser.tbl");
	lListFile.AddTail(pMstFile);

	if( isvldflg == 0 ){
		m_strSvLd.Format("  %s をセーブしています。",  "”部材カラー設定マスタファイル”" ) ;
		UpdateData( FALSE );
		for( pos = lListFile.GetHeadPosition(); pos != NULL; ){ 
			m_prog.StepIt();
			pMstFile = lListFile.GetNext( pos );
			SaveFile( ( sFileSaveLoad = pMstFile->GetName() ), iret, fileDFL ); 
		}
	}else{
		m_strSvLd.Format("  %s をロードしています。",  "”部材カラー設定マスタファイル”" ) ;
		UpdateData( FALSE );
		for( pos = lListFile.GetHeadPosition(); pos != NULL; ){
			m_prog.StepIt();
			pMstFile = lListFile.GetNext( pos );
			LoadFile( (sFileSaveLoad = pMstFile->GetName()), iret, fileDFL );
		}
	}

	return iret;
}

Đoạn code này sFileSaveLoad = pMstFile->GetName() người hướng dẫn của mình nói là không được. Mình thấy nó cũng giống với cấu trúc int theValue = *pPointer mà.
Có thể giải thích cho mình biết tại sao không được không ạ.
Mình cảm ơn

Instructor không cho thì xài vậy

member of pointer accessor (->) có thể viết thành (* pMStFile).GetName()

6 Likes

Là RAII đó bạn ơi, việc quản lí heap memory new hay delete phải nằm ở trong CMstFile hết. Chứ không có việc client phải tự tay dùng new ở client code đâu.

5 Likes

Cảm ơn mọi người

người hướng dẫn của mình nói là đoạn code này không được
sFileSaveLoad = pMstFile->GetName()

mình đã hiểu sai lời nói của người hướng dẫn. Sau khi xem kỹ lại thì mình phát hiện ra chỗ không ổn là do

function GetName() này giá trị trả về là 1 CString. nhưng mình lại tạo ra 1 hàm CString mới để truyền vào sFileSaveLoad , trong khi chỉ cần pMstFile->GetName() là đủ.

cảm ơn mọi người đã giúp đỡ :smiling_face_with_three_hearts:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?