UPropperties, instanced VS non instanced, TSubclassOf VS raw pointer, explanations needed badly

Let’s say I have a class TopClass and class BottomClass, where TopClass references BottomClass and it also references some component in different ways.



#pragma once
#include "TestClassTop.generated.h"

/**
 * Class for testing. This will be the upper class
 */
UCLASS(Blueprintable, editinlinenew, BlueprintType, ClassGroup = (Custom), meta = (BlueprintSpawnableComponent))
class FEATURESTETS_API UTestClassTop : public UObject
{
	GENERATED_BODY()
public:

	UTestClassTop(const FObjectInitializer& ObjectInitializer);
	~UTestClassTop();

protected:

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StatPropperties")
	class UTestClassBottom* RawPointerNoInstanced;

	UPROPERTY(EditAnywhere, Instanced, BlueprintReadWrite, Category = "StatPropperties")
	class UTestClassBottom* RawPointerInstanced;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StatPropperties")
	TSubclassOf <class UTestClassBottom> Tsubclass;


	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StatProppertiesComponent")
	class UMeshComponent* RawPointerComponentNoInstanced;

	UPROPERTY(EditAnywhere, Instanced, BlueprintReadWrite, Category = "StatProppertiesComponent")
	class UMeshComponent* RawPointerComponentInstanced;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StatProppertiesComponent")
	TSubclassOf <class UMeshComponent> TsubclassComponent;
};




#pragma once
#include "TestClassBottom.generated.h"

/**
* Class for testing. This will be the upper class
*/
UCLASS(Blueprintable, editinlinenew, BlueprintType, ClassGroup = (Custom), meta = (BlueprintSpawnableComponent))
class FEATURESTETS_API UTestClassBottom : public UObject
{
	GENERATED_BODY()
public:

	UTestClassBottom(const FObjectInitializer& ObjectInitializer);
	~UTestClassBottom();

protected:

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BottomTestProperties")
	FName TestName;

	UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "BottomTestProperties")
	float TestValue;
};


Now if I open propperties of different types from the editor like so:

I get an empty list. When I use the Instanced argument, the list is populated as expected. I thought it was just that without the instanced argument it searches for the objects that are created by the editor while the one with the instanced property creates new object of type offered through the list. But then I realized that for component referencing properties both ones that contain instanced and those that don’t work seemingly the same, both showing the full list of components.

I have seen the documentation for “Instanced” you have linked, but it isn’t very informative. What do they mean by “object assigned to this variable in defaults”?

Also, when I have a non instanced property that is not null by default but has an object created in the class constructor, I can see the object, but can’t access any of it’s properties. Is it just something you don’t do in unreal engine, or can it be made to work somehow?

Aha, I’m starting to understand. So when creating a particle system in the editor I’m creating an object, not a new class, and therefore non instanced property sees that object, but instanced one does not see any classes it can use as a base to create new items. Am I corect? And the TSubClassOf is a templated err something? that holds references to UClasses that are basically just somethingused by the reflection system to keep data about properties each object type contains. Am I right there also?

Ok, that sounds reasonable. Thanx.