UE4 uses only one asset per package, and the asset must be named the same as the package. So you would create the Package at “/Game/MyAssets/Textures/turret4Diffuse” and then create the texture object naming it “turret4Diffuse” and passing the UPackage* as it’s outer object. Then you want to notify the asset registry of your new texture asset using FAssetRegistryModule::AssetCreated() and passing the texture object, then mark it dirty using the Package->SetDirtyFlag(true). Now you have a texture asset at “/Game/MyAssets/Textures/turret4Diffuse.turret4Diffuse”, which you can see in the content browser. You might also want to call PreEditChange and PostEditChange on the texture object while modifying it to get it to update in the content browser.
The way I do it is use a factory to create my asset although it’s not entirely necessary for all asset types, it sets up some default data properly. In your case you’d want to NewObject() a UTexture2dFactoryNew and make the texture object by calling FactoryCreateNew() on it. It works basically the same as NewObject, just with extra initialization based on the asset type.