Dereferenzieren?

  • Hi jungens, ich tue mich noch schwer zu erkennen, wann ich dereferenzieren "*..." soll und wann nicht, hat da jemand ne gute Erklärung?


    Hier ein Beispiel:


    Code
    IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get();
    if (OnlineSubsystem)
    {
         if (GEngine)
         {
         GEngine->AddOnScreenDebugMessage(-1, 15.f, FColor::Yellow, FString::Printf(TEXT("found subsystem: %s"), *OnlineSubsystem->GetSubsystemName().ToString()));
         }
    }


    Im Beispiel wird ja "*OnlineSubsystem" ja durch das "*" dereferenziert.

    Da "OnlineSubsystem" ein Pointer ist und somit eine Adresse innehat, wird durch das Dereferenzieren der Pointer nun wieder einen Wert ausgeben, versteh ich richtig so?


    Kann das Rereferenzieren noch etwas anderes? Kann es auch auf eine normale Variable angewendet werden um wieder die Adresse der Variable wiederzugeben? Kann das Rereferenzieren noch etwas anderes?

  • Hi,


    in dem Beispiel hat das nichts mit den eigentlichen C++-Pointern direkt zu tun.


    Es handelt sich dort um den '*'-operator der FString Klasse (https://docs.unrealengine.com/…tainers/FString/op_deref/).


    Also macht * bei einem FString das hier:


    C++
    /**
     * Get pointer to the string
     *
     * @Return Pointer to Array of TCHAR if Num, otherwise the empty string
     */
    FORCEINLINE const TCHAR* operator*() const
    {
        return Data.Num() ? Data.GetData() : TEXT("");
    }